2016-10-10 3 views
0

Dans mon formulaire, j'ai essayé de définir l'ID = Model.SearchTerm mais le ne fonctionne pas comme quand je vais à la page de formulaire, il dit "Référence d'objet non défini à un instance d'un objet. " ce qui est logique, car l'utilisateur n'a pas encore entré un terme de recherche. Par exemple, sur notre page Installations, nous avons plusieurs façons de trouver une installation. Dans ce cas, lorsque vous effectuez une recherche par code postal, vous obtenez l'URL http://localhost:50264/Facilities/SearchByZipCode.MVC 5 Html.BeginForm inclure des valeurs dans l'URL

est ici la forme:

@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> 
} 

Lorsque vous publiez, vous obtenez la ActionResult suivante:

[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); 
} 

Ainsi, la question est, comment puis-je faire alors quand quelqu'un cherche une installation , il fait l'URL http://localhost:50264/Facilities/SearchByZipCode?Distance=50&ZipCode=32608

Je voudrais que cela soit fait principalement parce que je voudrais faire notre SiteMap pour capturer SearchByZipCode avec les preserveRouteParameters étant égal à "distance, code postal".

Merci pour votre aide. Si vous avez besoin de plus d'informations faites le moi savoir.

Répondre

1

Pour http://localhost:50264/Facilities/SearchByZipCode?Distance=50&ZipCode=32608, vous aurez besoin HttpGet.

La méthode la plus simple consiste à créer une autre surcharge de méthode avec les paramètres de distance et de code postal.

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

Merci d'avoir posté la réponse, fonctionne très bien maintenant! – ajtatum

1

votre url exigence est comme HttpGet base (comme querystring)

donc vous devez faire votre méthode comme HttpGet dans le contrôleur.