如果URI上有数据,则MVC自动提交表单

时间:2016-01-22 08:11:38

标签: c# jquery asp.net-mvc-4 razor

在我的MVC应用程序中,我有一个搜索页面,它将显示一些数据输入框和一个"提交"按钮执行搜索...这一切都很好,花花公子,按预期工作。

但是,我需要实施一个"深层链接"搜索机制,其中数据输入字段从URI字符串预先填充,然后执行搜索。

如何让Controller的Index方法显示主视图,然后执行Search方法来填充视图的<div id="results">

Index.cshtml

@model Models.SearchRequest

@using (Ajax.BeginForm("Search", new AjaxOptions() { InsertionMode = InsertionMode.Replace, UpdateTargetId = "results" }))
{
    @Html.AntiForgeryToken();
    .
    .
    . Data entry boxes for search
    .
    .

    <div>
        <input type="submit" value="Search" />
    </div>


    <div id="results">
        <!-- Results of search go her -->
    </div>
}

SearchController.cs

public ActionResult Index([FromUri] Models.SearchRequest request)
{
    .. validation of the request

    return View(request);
}

public ActionResult Search(Models.SearchRequest request)
{
    ViewModels.ResultsVM results =  ... stuff that executes the search ...

    return PartialView("ResultsPV", results);
}

ResultsPV.cshtml

@model ViewModels.ResultsVM
.
.
.  Lots of Razor to display the data

1 个答案:

答案 0 :(得分:0)

实际上,我刚刚解决了这个问题。

-1在我的SearchRequest模型中,我添加了

public ViewModels.ResultsVM Result;

-2更改了要添加的Index方法

if (...uri data is valid...)
{
    request.Result = ExecuteSearch(request);
}

-3将Search方法更改为

return PartialView("ResultsPV", ExecuteSearch(request));

-4提取了实际搜索到新方法的所有代码

private ViewModel.ResultsVM ExecuteSearch(Models.SearchRequest request)
{
    ViewModels.ResultsVM results =  /* stuff that executes the search */

    return (results);
}

-5。将<div id="results">更改为...

<div id="results">
    @if (Model.Result != null)
    {
        @Html.Partial("ResultsPV", Model.Result)
    }
</div>