MVC 5 Html.BeginForm包含URL中的值

时间:2016-10-10 16:52:57

标签: asp.net-mvc asp.net-mvc-5 html.beginform

在我的表单中,我已经尝试设置id = Model.SearchTerm,但是当我转到表单页面时它没有工作"对象引用未设置为实例一个对象。"这是有道理的,因为用户还没有输入搜索词。

例如,在我们的设施页面上,我们有多种方法可以找到设施。在这种情况下,当您按邮政编码进行搜索时,您会将网址设为http://localhost:50264/Facilities/SearchByZipCode

以下表格:

@if (@ViewBag.ZipCodeSerachError != null)
{
    @ViewBag.ZipCodeSerachError
}
@using (Html.BeginForm("SearchByZipCode", "Facilities", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
    @Html.LabelFor(m => m.SearchTerm, "5 Digit Zip Code:")

    @Html.TextBoxFor(m => m.SearchTerm, new { @class = "form-control", maxlength = 5, id = "zipCodeSearch" })
    <br />
    @Html.LabelFor(m => m.Distance, "List facilities within:")

    @Html.DropDownList("Distance", ViewBag.ZipCodeDistanceList as IEnumerable<SelectListItem>, new { @class = "form-control" })
    <br />
    <button type="submit" class="btn btn-default">Search</button>
}

发布时,您会收到以下ActionResult:

[HttpPost]
public ActionResult SearchByZipCode(FacilitiesSearchViewModel.FacilitiesByZipCode vm)
{
    var zipCode = oandpService.GetZipCodes().FirstOrDefault(x => x.ZipCodeId == vm.SearchTerm);

    var facilities = new List<Facility>();

    if (zipCode == null)
    {
        ViewBag.ZipCodeSerachError = "An Invalid or Unknown US Zip Code was Entered!";
        facilities = new List<Facility>();
    }
    else
    {
        var zipCodeId = oandpService.GetZipCode(vm.SearchTerm);
        var zipCodes = oandpService.GetZipCodesByDistance(string.Format("{0} {1}", zipCodeId.ZipLongitude, zipCodeId.ZipLatitude), vm.Distance.GetValueOrDefault(0)).Select(x=> new ZipCodeWithDistance() { ZipCode = x.ZipCode, ZipLatitude = x.ZipLatitude, ZipLongitude = x.ZipLongitude, Distance = x.Distance}).ToList();

        facilities = oandpService.GetFacilitiesByZipCodes(zipCodes).OrderByDescending(x=>x.IsFeatured).ThenBy(x=>x.Name).ToList();
    }
    var results = new FacilitiesSearchViewModel.FacilitiesByZipCode
    {
        SearchTerm = vm.SearchTerm,
        Distance = vm.Distance,
        Facilities = facilities
    };

    return View("SearchByZipCode", results);
}

所以,问题是,如果有人搜索工具,我该如何制作呢?它会生成网址http://localhost:50264/Facilities/SearchByZipCode?Distance=50&ZipCode=32608

我想完成这项工作主要是因为我想让我们的SiteMap捕获SearchByZipCode,其中protectedRouteParameters等于&#34;距离,邮政编码&#34;。

感谢您的帮助。如果您需要更多信息,请告诉我们。

2 个答案:

答案 0 :(得分:1)

对于http://localhost:50264/Facilities/SearchByZipCode?Distance=50&ZipCode=32608,您需要 HttpGet

最简单的方法是使用distance和zipCode参数创建另一个方法重载。

[HttpGet]
public ActionResult SearchByZipCode(string distance, string zipCode)
{
   ...
}

答案 1 :(得分:1)

你的需求url就像基于HttpGet(如querystring)

所以你需要在控制器中将你的方法设为HttpGet。