是否可以忽略部分视图的模型?

时间:2019-09-09 06:42:09

标签: c# asp.net-mvc model-view-controller

我有一个带有List的模型绑定的ASP.NET MVC视图

在我的视图内部,我有一个局部视图,该视图应处理其他操作的结果,并应在操作完成后进行更新。

但是部分视图总是崩溃,因为它试图消耗主视图的模型。

@model List<planemOsIdConsumer.Models.CommonDtosRole>

@{
    ViewBag.Title = "Rollen und Rechte";
}

<table>
    <thead>
        <tr>
            <th>Your Column Header Name</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
            <tr>
                <td>
                    <label>@Html.Display(item.Name)</label>
                </td>
            </tr>
        }
    </tbody>
</table>

            @using (Ajax.BeginForm("Create", "Role", new AjaxOptions
            {
                InsertionMode = InsertionMode.Replace, //target element(#mydiv) will be replaced
                UpdateTargetId = "mydiv"
            }))
            {
                <table cellpadding="5">
                    <tr>
                        <td>Rollenname:</td>
                        <td><input type="text" name="Name" id="roleNameVal" placeholder="Neue Rolle" /></td>
                    </tr>
                </table>
                <br />

                <label id="resultLabel"></label>
                <input type="submit" value="Submit" id="btn_click" />

                <div id="mydiv">
                    @{
                        Html.RenderPartial("_CreateResult");
                    }
                </div>
            }

局部视图

@model planemosIdUi.Dto.Result

@{
      ViewBag.Title = "_CreateResult";
}
@{
    if (Model?.Success == true)
    {
        <label>Erstellt</label>
    }
    else if(Model?.Success == false)
    {
        <label>Fehler</label>
    }
    else
    { 
        <label>Do something</label>
    }
} 

如果可以的话,部分视图应该从主视图中忽略模型。

3 个答案:

答案 0 :(得分:1)

  1. 您要删除Model类,在顶部已提到。然后只有它不会要求模型,也不会抛出错误。
  2. 但是根据您的代码,它应该在那里。
  3. 如下所示在主CSHTML页面中传递可为空的模型
Html.RenderPartial("_CreateResult", new planemosIdUi.Dto.Result());

答案 1 :(得分:0)

如果您尝试在执行某些操作后显示部分视图,则可以使用ajax将部分视图内容附加到mydiv id上,否则每次加载页面时,部分视图都会渲染。

 $.ajax({
      cache: false,
      async: false,
      type: "POST",
      contentType: "application/json",
      url: "/ControllerName/ActionName",
      success: function (result) {
         $("#mydiv").html(result);
      }
 });

在控制器中,您可以将部分视图返回为

public ActionResult ActionName()
{
    planemosIdUi.Dto.Result model=new planemosIdUi.Dto.Result();// model object to partial view
    return PartialView("_CreateResult",model);
}

答案 2 :(得分:0)

您的_CreateResult.cshtml要求使用Result.cs类型的模型,并且必须在Html.RenderPartial方法内部传递该模型,这是它的第二个参数。

Html.RenderPartial(“ _ CreateResult”,“传递类型为Result.cs的模型”);