问题 没有模型的MVC 5 Html.BeginForm


我在_Layout页面上有一个简单的搜索表单。

如何轻松地将search-fld中的值传递给控制器​​?无需创建Model或ViewModel。

@using (Html.BeginForm("Search", "Home", new { id = "search-fld" }, FormMethod.Post, new { @class = "header-search pull-right" }))
{
    @Html.AntiForgeryToken()

    <input type="text" placeholder="Search" id="search-fld">
    <button type="submit">
        <i class="fa fa-search"></i>
    </button>
}

如果我运行这个,那么“search-fld”会被发送到控制器(offcourse)

使用Ajax表单并使用Jquery获取值?


2988
2017-09-09 13:07


起源



答案:


只需给你的 input 一个 name 属性:

<input type="text" placeholder="Search" id="search-fld" name="searchValue">

然后将该名称与控制器中的参数进行匹配 HttpPost 方法:

[HttpPost]
public ActionResult Search(string searchValue)

13
2017-09-09 13:09



是的,那种作品。唯一的问题是现在的URL是 本地主机:52223 如果我搜索“asd”,它会传递参数并且URL会更改为 本地主机:52223 /搜索 但我想说 本地主机:52223 /搜索/ ASD 如果我在控制器上有一个自定义路由,这样可以工作:[Route(“Search / {searchString}”)]但是它不起作用,因为它没有从表单中传递路由属性中的值:/任何建议? - stibay
还有在Route.Config中映射的自定义路由。像这样:routes.MapRoute(名称:“Home”,url:“{action} / {id}”,默认值:new {controller =“Home”,action =“Index”,id = UrlParameter.Optional}); - stibay
如果名称匹配,它将会,即如果你有 public ActionResult Search(string searchValue),那么你也需要 name="searchValue" 在你的输入和 [Route("Search/{searchValue}")] 作为你的路线。 - Chris Pratt


答案:


只需给你的 input 一个 name 属性:

<input type="text" placeholder="Search" id="search-fld" name="searchValue">

然后将该名称与控制器中的参数进行匹配 HttpPost 方法:

[HttpPost]
public ActionResult Search(string searchValue)

13
2017-09-09 13:09



是的,那种作品。唯一的问题是现在的URL是 本地主机:52223 如果我搜索“asd”,它会传递参数并且URL会更改为 本地主机:52223 /搜索 但我想说 本地主机:52223 /搜索/ ASD 如果我在控制器上有一个自定义路由,这样可以工作:[Route(“Search / {searchString}”)]但是它不起作用,因为它没有从表单中传递路由属性中的值:/任何建议? - stibay
还有在Route.Config中映射的自定义路由。像这样:routes.MapRoute(名称:“Home”,url:“{action} / {id}”,默认值:new {controller =“Home”,action =“Index”,id = UrlParameter.Optional}); - stibay
如果名称匹配,它将会,即如果你有 public ActionResult Search(string searchValue),那么你也需要 name="searchValue" 在你的输入和 [Route("Search/{searchValue}")] 作为你的路线。 - Chris Pratt


您可以像这样使用Ajax调用:

 $(document).ready(function() {
$("#yourButton").click(function () {
            var yourValue = $("#search-fld").val() ;
            var url = "Search/asd/";
            $.ajax({
                url: url,
                cache: false,
                type: 'POST',
                data: {
                    searchValue = yourValue
                }
                success: function (data) {
                    if (data === true) {
                        alert('Success');
                    } else {
                        alert('Failed');
                    }
                    }
                })
            })
        })

和控制器中的方法:

[HttpPost]
public ActionResult asd(string searchValue)
{

}

0
2017-09-09 13:23