[英]properties of View Model are not set on HttpPost
我的視圖模型代碼:
public class Step2ViewModel : MultiStepBaseViewModel
{
public IList<LayoutDetail> LayoutConfig { get; set; }
}
我的查看代碼:
@model eliteemail.Web.Mvc.Areas.Emails.ViewModels.Step2ViewModel
@{
ViewBag.Title = "Layout";
Layout = "~/Views/Shared/_HomeLayout.cshtml";
}
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
for (int i = 0; i < @Model.LayoutConfig.Count(); i++)
{
<div class="grid_3 tcenter">
<div class="divhighlight">
<div style="width: 165px; margin: 6px auto 4px auto;" class="f16 bold tcenter" id="helptrigger1">@Model.LayoutConfig[i].LayoutTitle</div>
<a class="fancybox" rel="layouts" href="@Model.LayoutConfig[i].LayoutImgPrev" title="1 Column">
<img src="@Model.LayoutConfig[i].LayoutImg" alt="1 Column" width="189" height="227" vspace="5" />
</a>
<div style="width:189px; margin:auto">
<input type="submit" class="button gobutton" style="margin-right: 40px; width: 165px;" value="Select" name="@Model.LayoutConfig[i].LayoutID,@Model.LayoutConfig[i].LayoutTitle"/>
</div>
</div>
</div>
}
}
我的控制器代碼:
public ActionResult Step2()
{
Step2BusinessLogic step2BusinessLogic = new Step2BusinessLogic();
Step2ViewModel step2ViewModel = step2BusinessLogic.CreateStep2ViewModel();
return View(step2ViewModel);
}
[HttpPost]
public ActionResult Step2(Step2ViewModel step2ViewModel)
{
....
}
我的業務邏輯類代碼:
public class Step2BusinessLogic
{
public Step2ViewModel CreateStep2ViewModel(string Id)
{
Step2ViewModel step2ViewModel = new Step2ViewModel();
step2ViewModel.MultiStepId = new Guid(Id);
step2ViewModel.LayoutConfig = GetLayout();
return createEmailStep2ViewModel;
}
public List<LayoutDetail> GetLayout()
{
List<LayoutDetail> layoutList = new List<LayoutDetail>();
LayoutDetail layout1 = new LayoutDetail();
layout1.LayoutID = 1;
layout1.LayoutTitle = "1 Column";
layout1.LayoutImg = "~/img/create/layout/layout-1.png";
layout1.LayoutImgPrev = "img/create/layout/layout-1-preview.png";
layoutList.Add(layout1);
LayoutDetail layout2 = new LayoutDetail();
layout2.LayoutID = 2;
layout2.LayoutTitle = "1:2 Column";
layout2.LayoutImg = "~/img/create/layout/layout-2.png";
layout2.LayoutImgPrev = "img/create/layout/layout-2-preview.png";
layoutList.Add(layout2);
.........(12 Items)
return layoutList;
}
}
public class LayoutDetail
{
public int LayoutID { get; set; }
public string LayoutTitle { get; set; }
public string LayoutImg { get; set; }
public string LayoutImgPrev { get; set; }
}
問題是,當我從Step2View.cshtml
提交時,
public ActionResult Step2(Step2ViewModel step2ViewModel)
被調用,但是未設置step2ViewModel
的屬性,並且ModelState.IsValid
返回false。 我想避免兩種情況。 請提供任何幫助,因為我是MVC的新手。
我搜索了幾個鏈接,但不了解這種情況。
問題是您發布帖子時沒有提交任何內容。 除按鈕外,您沒有其他表單元素。 如果您有表單元素,那么數據將被傳回。 嘗試在視圖中添加@Html.HiddenFor(o=>o.LayoutID)
,然后再次發布。 表單將回傳隱藏的元素或表單域,但不會像您所做的那樣僅顯示域。
不要在集合對象上使用foreach
循環,因為模型聯編程序無法使用它。 請使用for-loop
。 在您的代碼中,將@item
每次出現都替換為@Model.LayoutConfig[i]
,請參見下面的更新代碼:
for(var i=0;i<@Model.LayoutConfig.Count();i++)
{
<div class="grid_3 tcenter">
<div class="divhighlight">
<div style="width: 165px; margin: 6px auto 4px auto;" class="f16 bold tcenter" id="helptrigger1">@Model.LayoutConfig[i].LayoutTitle</div>
<a class="fancybox" rel="layouts" href="@Model.LayoutConfig[i].LayoutImgPrev" title="1 Column">
<img src=@Model.LayoutConfig[i].LayoutImg" alt="1 Column" width="189" height="227" vspace="5" />
</a>
<div style="width:189px; margin:auto">
<input type="submit" class="button gobutton" style="margin-right: 40px; width: 165px;" value="Select" name="@Model.LayoutConfig[i].LayoutID, @Model.LayoutConfig[i].LayoutTitle"/>
</div>
</div>
</div>
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.