I think I am missing something obvious while attempting to add autocomplete functionality in MVC 4. From what I have found in other posts I have been able to put together an example however the method in my controller is not being called.
What I have tried so far...
_Layout
@Styles.Render("~/Content/themes/base/css")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryui")
@Scripts.Render("~/bundles/jqueryval")
Controller
Public Function Numbers(term As String) As ActionResult
Return Json(New String() {"one", "two", "three", "four", "five", "six"}, JsonRequestBehavior.AllowGet)
End Function
View (I have hard coded the Home/Numbers for now)
<div class="editor-label">
@Html.LabelFor(Function(model) model.Number)
</div>
<div class="editor-field">
@Html.EditorFor(Function(model) model.Number)
@Html.ValidationMessageFor(Function(model) model.Number)
</div>
<script type="text/javascript">
$(function () {
$("#Number").autocomplete({
source: 'Home/Numbers',
minLength: 1
});
});
</script>
When I run my app and type in the textbox nothing happens. I have put a breakpoint in the "Numbers" function and it seems that it is never called.
My project can be found here http://www.filedropper.com/testapp
If you have the
@Scripts.Render
lines at the bottom of thebody
element in the layout and after the@RenderBody()
you need to put your script in thescripts
section:Because your script depends on jQuery so jQuery should be loaded first.
Or just move your
@Scripts.Render
declaration into thehead
in the layout then you don't need to put your code into thescripts
section (but you are better off with using the section)For Viewpage
For Controller :
Keep router setting default otherwise action will not call
I suggest you to control errors in Chrome to ensure that jQuery libraries working properly. if there is no problem, Try this script :
Then in your Razor (C#):
If you want to use Razor Html Helpers instead of using 'input' tag, The id attribute is the same name of Model.Member. Notice that in Controller, you must input string with the 'term' name, as written in your code. For security reasons, you must avoid using parameters in js file that shows the site technology. The method declared above never uses js file to get address of resource.
This is the total code project of autocomplete textbox example .
http://blogs.msdn.com/b/stuartleeks/archive/2012/05/02/asp-net-mvc-amp-jquery-ui-autocomplete-part-2-editorfor.aspx