我有超過40個領域的大視野。其中一些字段是下拉列表,我使用selectlistitems列表填充。模型狀態無效:當我有dropdownlists時如何返回查看?
我使用我的視圖模型的註釋,使他們中的一些要求。
現在,我想使ModelState.IsValid
檢查,並返回到出現問題的獨到見解,如果有一些錯誤。
問題是,如果我只是簡單地創建一個return View(model)
,我所有的下拉列表都會使網站崩潰,因爲它們需要再次填充才能加載頁面。
所以我的問題是:如何處理返回時的ModelState是無效的。
我的控制器:
public ActionResult CreateSelling(SellingAdViewModel model)
{
if (ModelState.IsValid)
{
SellingAdvert sellingAdvert = setSellingAd(model);
var stored_advert = sellingAdvertService.Create(sellingAdvert);
if (User != null && User.Identity.IsAuthenticated)
{
if (model.AcceptPartner)
{
notifyPartner(stored_advert);
}
return RedirectToAction("Upgrade", "Ads", new { AdvertID = stored_advert.Id });
}
else
{
return RedirectToAction("ActivateAnonymous", "Ads", new { AdvertID = stored_advert.Id, anonymousId = model.UserId, AdvertType = "selling" });
}
}
return View(model);
}
我的視圖模型(我有一個從這個派生的SellingAdViewModel並添加更多的特性):
public class BasicAdViewModel
{
public int SectorId { get; set; }
public Guid UserId { get; set; }
public bool IsAnonymousUser { get; set; }
public int AdvertId { get; set; }
[DisplayName("Titel:")]
[Required(ErrorMessage = "Titel skal udfyldes")]
public string Headline { get; set; }
[DisplayName("Beskrivelse:")]
[StringLength(50, ErrorMessage = "Beskrivelsen minimum fylde 50 karakterer")]
public string Description { get; set; }
[DisplayName("Søgeord:")]
public string SearchWords { get; set; }
[DisplayName("Undertitel:")]
public string Subtitle { get; set; }
[DisplayName("Type af drift")]
public List<SelectListItem> OperationTypes { get; set; }
[Required]
public int SelectedOperationTypeId { get; set; }
[Required]
public int SelectedSectorId { get; set; }
public IEnumerable<GroupedSelectListItem> Sectors { get; set; }
}
設置我dropdownlists擺在首位:
我的模型有List<SelectListItem>
p roperties,我填充它們具有幾個輔助方法:
SellingAdViewModel model = new SellingAdViewModel()
{
BusinessEntityTypes = ModelListHelpers.GetBusinessEntityTypes(),
FoundedYears = ModelListHelpers.GetFoundedYears(null),
ReasonForSale = ModelListHelpers.GetReasonForSale(),
RevenuePrediction = ModelListHelpers.GetRevenuePrediction(),
RevenueStatus = ModelListHelpers.GetRevenueStatus(),
OperationTypes = ModelListHelpers.GetOperationTypes(),
Region = ModelListHelpers.GetRegions(),
Turnover = ModelListHelpers.Turnovers(),
OperatingIn = ModelListHelpers.OperatingIn(),
AmountOfEmployees = ModelListHelpers.GetAmountOfEmployees()
};
我通常把下拉的TempData的名單,然後如果我的ModelState中是無效的,我從TempData的讓他們再拍model.dropdown =(類型)的TempData [「下拉菜單」]; – theLaw 2014-10-29 10:38:13
你如何填充你的dropdownlist第一次?在適當的地方使用'ViewBag'做同樣的事情。 (即在行動中可能會)。我這樣做。 (在我看來,'viewbag'項目,如selectlistitems) – Zeeshan 2014-10-29 10:42:15
我只是說我該怎麼填我的視圖模型:)我這樣做對HTTPGET電話,我在那裏設置SelectListItems – 2014-10-29 10:46:32