I am working on MVC 5 Asp.Net and following this tutorial. I am wondering how the heck does this fetch the result when I click the Filter button?
There comes a point where this code is added in Movie/view/Index.cshtml
@using (Html.BeginForm())
{
<p> Title: @Html.TextBox("SearchString") <br />
<input type="submit" value="Filter" /></p>
}
Now as far as I know, it creates a textbox and a button on screen. But how is this button calling the search(index) function and passing the value of textbox in the function, I could not get this.
It's not a stupid question. @html.BeginForm()
works like this. It has some parameters you could add to it like Action
Controller
FormType
htmlAttributes
. The way it works is that if you leave it empty it will look for a post action with the same name that on the page you are now, for example if you are in on the login page, it will look for a login post action. I always write what action
and controller
I want it to access.
@Html.BeginForm("AddUser", "Admin", FormMethod.Post, new { @class = "my_form"}) {
}
So your post action
should accept parameters that your form contains, and that can be a Model
ie a Product
, ViewModel
or single string parameters. In your case with the search your action should look like
[HttpPost]
public ActionResult Search(string SearchString)
{
//do something here
}
Please note here, for the search string to be passed into the method. The name of the <input>
has to be the same as the parameter your action takes. So our form should be like this
@using (Html.BeginForm("Search", "YOUR CONTROLLER", FormMethod.Post)){
<p> Title: @Html.TextBox("SearchString") <br />
<input type="submit" value="Filter" /></p>
}
Hope this brings clarity.