C# Post操作中的ViewModel属性为Null
这个问题现在已经解决了。下面是Ish的建议,再加上在视图中添加对@HiddenFor的调用,解决了这个问题C# Post操作中的ViewModel属性为Null,c#,asp.net,asp.net-mvc,asp.net-mvc-5,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 5,这个问题现在已经解决了。下面是Ish的建议,再加上在视图中添加对@HiddenFor的调用,解决了这个问题 @for (int i = 0; i < relatedDefects.Count(); i++ ) { <tr> <td> @Html.EditorFor(x => relatedDefects[i].IsSameDefect) </td> </tr> }
@for (int i = 0; i < relatedDefects.Count(); i++ )
{
<tr>
<td>
@Html.EditorFor(x => relatedDefects[i].IsSameDefect)
</td>
</tr>
}
我有一个ASP.NETMVC5Web应用程序,用户可以在其中将缺陷标记为已解决。我想显示一个潜在相关缺陷的列表,用户可以勾选复选框,表示是的,这是相同的缺陷,并且还应该标记为已解决
@for (int i = 0; i < relatedDefects.Count(); i++ )
{
<tr>
<td>
@Html.EditorFor(x => relatedDefects[i].IsSameDefect)
</td>
</tr>
}
因此,我有一个视图模型,它的一个属性是一个集合,其中的每个成员都包含一个缺陷对象属性和布尔值IsSameDefect
属性。这一切在GET操作方法和视图中都可以正常工作。我可以显示相关缺陷并勾选框
@for (int i = 0; i < relatedDefects.Count(); i++ )
{
<tr>
<td>
@Html.EditorFor(x => relatedDefects[i].IsSameDefect)
</td>
</tr>
}
当我想要更新数据时,问题出现在POST操作中。此时,属性(潜在相关缺陷的集合)为空。我很难弄清楚如何将这些数据传回控制器
@for (int i = 0; i < relatedDefects.Count(); i++ )
{
<tr>
<td>
@Html.EditorFor(x => relatedDefects[i].IsSameDefect)
</td>
</tr>
}
按要求编码
// GET: /DefectResolution/Create
public ActionResult Create(int ciid)
{
int companyId = User.CompanyID();
DefectResolutionCreateViewModel drcvm = new DefectResolutionCreateViewModel(ciid, companyId);
return View(drcvm);
}
// POST: /DefectResolution/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(DefectResolutionCreateViewModel drcvm)
{
DefectResolutions currentResolution = drcvm.DefectResolution;
currentResolution.CreatedOn = System.DateTime.Now;
currentResolution.UserID = User.UserID();
if (ModelState.IsValid)
{
unitOfWork.DefectResolutionRepository.Insert(currentResolution);
if (currentResolution.ResolutionStatusID == 2)
{
//code breaks here as drcvm.RelatedUnresolvedDefects is null
foreach (var relatedDefect in drcvm.RelatedUnresolvedDefects)
{
if (relatedDefect.IsSameDefect)
{
DefectResolutions relatedResolution = new DefectResolutions();
relatedResolution.ChecklistID = relatedDefect.RelatedChecklist.ChecklistID;
relatedResolution.CreatedOn = System.DateTime.Now;
relatedResolution.ResolutionNote = currentResolution.ResolutionNote;
relatedResolution.ResolutionStatusID = currentResolution.ResolutionStatusID;
relatedResolution.UserID = User.UserID();
}
}
}
unitOfWork.Save();
return RedirectToAction("Index", new { ciid = currentResolution.ChecklistID });
}
return View(drcvm);
}
@for (int i = 0; i < relatedDefects.Count(); i++ )
{
<tr>
<td>
@Html.EditorFor(x => relatedDefects[i].IsSameDefect)
</td>
</tr>
}
在视图中
@model Blah.ViewModels.DefectResolution.DefectResolutionCreateViewModel
@{
ViewBag.Title = "Create Defect Resolution";
var relatedDefects = Model.RelatedUnresolvedDefects;
}
@for (int i = 0; i < relatedDefects.Count(); i++ )
{
<tr>
<td>
@Html.EditorFor(x => relatedDefects[i].IsSameDefect)
</td>
</tr>
}
。。。后来在视图中
@for (int i = 0; i < relatedDefects.Count(); i++ )
{
<tr>
<td>
@Html.EditorFor(x => relatedDefects[i].IsSameDefect)
</td>
</tr>
}
我建议您在视图(.cshtml)中呈现缺陷时,使用
for
循环,而不是foreach
@for (int i = 0; i < relatedDefects.Count(); i++ )
{
<tr>
<td>
@Html.EditorFor(x => relatedDefects[i].IsSameDefect)
</td>
</tr>
}
根据您的代码编辑答案。视图中的以下语句创建问题
@for (int i = 0; i < relatedDefects.Count(); i++ )
{
<tr>
<td>
@Html.EditorFor(x => relatedDefects[i].IsSameDefect)
</td>
</tr>
}
var relatedDefects = Model.RelatedUnresolvedDefects;
您应该直接迭代循环中的Model.relatedUnsolvedDefects
属性
@for (int i = 0; i < relatedDefects.Count(); i++ )
{
<tr>
<td>
@Html.EditorFor(x => relatedDefects[i].IsSameDefect)
</td>
</tr>
}
@for (int i = 0; i < Model.RelatedUnresolvedDefects.Count(); i++ )
{
<tr>
<td>
@Html.EditorFor(x => Model.RelatedUnresolvedDefects[i].IsSameDefect)
</td>
</tr>
}
@for(int i=0;iModel.relatedUnsolvedDefects[i].IsSameDefect)
}
请发布一些代码。只有这样,我们才能帮助您解决问题。我不得不在视图中添加一系列@Html.HiddenFor调用,但与上面的Ish建议相结合解决了问题,谢谢!