2016-10-10 7 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); 
} 

を誰かが施設を検索するとき、質問は、どのように私はそれを作ることができているが、 URLを作成します。http://localhost:50264/Facilities/SearchByZipCode?Distance=50&ZipCode=32608

私は、SiteMapでpreservedRouteParametersを持つSearchByZipCodeをキャプチャするようにしたいと思っています。 「距離、郵便番号」に等しい。

ありがとうございました。より多くの情報が必要な場合は、私に知らせてください。

答えて

1

http://localhost:50264/Facilities/SearchByZipCode?Distance=50&ZipCode=32608ためには、HTTPGETが必要になります。

最も簡単な方法は、distanceパラメータとzipCodeパラメータで別のメソッドのオーバーロードを作成することです。

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

回答を投稿していただきありがとうございます。 – ajtatum

1

あなたの条件のURLが

(クエリ文字列のような)に基づくので、あなたは、コントローラにHTTPGETとしてあなたの方法を確認する必要がありHTTPGETのようなものです。

関連する問題