我的 View 中有此表单,它引导我在 Controller 中执行某些操作。问题是我不知道如何将参数传递给操作方法。
<form class="full-search" asp-controller="Movies" asp-action="Search">
<input type="search" name="searchmovie" placeholder="Search..." class="search-form">
<select name="option" form="">
<option name="option" value="category1">category 1</option>
<option name="option" value="category2">category 2</option>
<option name="option" value="category3">category 3</option>
</select>
<i class="fas fa-caret-down"></i>
<input type="submit" name="" class="submit-full-search">
<div class="search-btn-submit">
<img src="~/img/search.svg">
</div>
</form>
这是我的 Controller :
[HttpGet("searchmoview/{option?}/{searchmovie}")]
public IActionResult Search(string option, string searchmovie)
{
//perform some search based on the filters
return View("Search", data);
}
但是当我运行我的代码时,当我点击搜索时,url 看起来像这样:
https://localhost:33590/Information/Search
而不是像这样:
https://localhost:44320/seachmovie/category1/{searchString}
关于如何传递参数的任何想法?
最佳答案
长话短说 - 没有现成的方法可以将表单值映射到路由。
将值传回您的 mvc Controller 的最佳方式是拥有一个 View 模型。
创建一个搜索 View 模型。
//View Model
public class SearchViewModel{
public string Query {get;set;}
public string Category {get;set;}
}
在您的 Controller 中,您需要将其传递给您的 View 或部分 View 。 在 .NET 中使用“ActionResult”,在 .Net Core 中使用“IActionResult”
//Controller
public class SearchController{
[HttpGet]
public ActionResult SearchBox(){
return View();
}
[HttpPost]
public ActionResult SearchBox(SearchViewModel model){
//model is now populated with your values from your form.
//ex: model.Query
return View();
}
}
为您的类别创建一个枚举,还有许多其他方法可以做到这一点,但这是最简单的方法。
//Enum
public enum Categories
{
Category1,
Category2
}
现在在你的 razor View 中绑定(bind)你的 View 模型,你就可以开始了。
//Razor View
@model SearchViewModel
@using (Html.BeginForm("SearchBox", "Search", FormMethod.Post))
{
@Html.TextBoxFor(x => x.Query, new { @class = "search-form"})
@Html.DropDownListFor(x => x.Catergory,
new SelectList(Enum.GetValues(typeof(Categories))),
"Select Category", new { @class= "example-class"})
<i class="fas fa-caret-down"></i>
<input type="submit" name="" class="submit-full-search">
<div class="search-btn-submit">
<img src="~/img/search.svg">
</div>
}
如果您希望将表单值发布到您的网址,您可以将其更改为 FormMethod.Get
//Razor View
@model SearchViewModel
@using (Html.BeginForm("SearchBox", "Search", FormMethod.Get))
{
@Html.TextBoxFor(x => x.Query, new { @class = "search-form"})
@Html.DropDownListFor(x => x.Catergory,
new SelectList(Enum.GetValues(typeof(Categories))),
"Select Category", new { @class= "example-class"})
<i class="fas fa-caret-down"></i>
<input type="submit" name="" class="submit-full-search">
<div class="search-btn-submit">
<img src="~/img/search.svg">
</div>
}
如果您将其更改为 get,您还必须更改您的 Controller 以在您的 get 方法中期望这些。您也可以只绑定(bind)模型,MVC 会自动为您将参数映射回模型。
public class SearchController{
[HttpGet]
public ActionResult SearchBox(SearchViewModel model){
//if the model values are in the URL "model" will be populated, else it will be null.
return View();
}
}
关于c# - 将参数添加到 Razor 中的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50123277/