MVC 5中不使用模型的Html.BeginForm

12

我在_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" 将会被发送给控制器(当然)

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

2个回答

15

只需给您的input添加一个name属性:

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

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

[HttpPost]
public ActionResult Search(string searchValue)

还在 Route.Config 中映射了自定义路由。像这样:routes.MapRoute( name: "Home", url: "{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); - stibay
如果名称匹配,那么它就会匹配,例如,如果您有public ActionResult Search(string searchValue),那么您的输入还需要name="searchValue",并且您的路由需要[Route("Search/{searchValue}")] - Chris Pratt

0

你可以像这样使用 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)
{

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接