2016-10-10 75 views
0

在我的表單中,我試過設置id = Model.SearchTerm,但不起作用,因爲當我轉到表單頁時它說「對象引用未設置爲對象的實例「。這是有道理的,因爲用戶還沒有輸入搜索詞。MVC 5 Html.BeginForm在URL中包含值

例如,在我們的設施頁面上,我們有幾種方法來查找設施。在這種情況下,當您通過郵政編碼進行搜索時,您會得到URL爲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與preserveRouteParameters是等於「距離,郵編」。

謝謝你的一切幫助。如果您需要更多信息,請告訴我。

回答

1

對於http://localhost:50264/Facilities/SearchByZipCode?Distance=50&ZipCode=32608,你將需要HTTPGET

最簡單的方法是使用distance和zipCode參數創建另一個重載方法。

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

謝謝你發佈的答案,現在偉大的作品! – ajtatum

1

您的要求網址就像是基於HTTPGET(如查詢字符串)

,所以你需要讓你的方法,在HTTPGET控制器。