Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Post操作中的ViewModel属性为Null_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 5 - Fatal编程技术网

C# Post操作中的ViewModel属性为Null

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

这个问题现在已经解决了。下面是Ish的建议,再加上在视图中添加对@HiddenFor的调用,解决了这个问题

 @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建议相结合解决了问题,谢谢!