【问题标题】:loading and updating a view with two partialview使用两个部分视图加载和更新视图
【发布时间】:2014-04-12 00:30:11
【问题描述】:

使用 C#、MVC、Razor

我很难掌握如何在两个局部视图上执行模型加载,以及如何在用户输入时使用新信息更新这些视图。

我有一个包含以下内容的常规视图:

    @model Myapp.ViewModels.SearchedUser
<body>
<div id="tabs">
<ul>
    <li><a href="#tabs-1">User</a></li>
    <li><a href="#tabs-2">Groups</a></li>
</ul>
    <div id="tabs-1">
        @Html.Partial("_Edit"); 
    </div>
    <div id="tabs-2">
        @{Html.Partial("_Groups");}
    </div>
</div>

最初,用户显示在主视图上。但是,我需要更新/添加/删除用户组,并在添加该代码时开始将其移至选项卡式页面。

所以在要编辑的部分视图上,我有:

    @model Myapp.ViewModels.SearchedUser
    ...display code for user

我觉得这里的@model 从主视图中可能是多余的。

我的小组部分视图如下所示:

@model Myapp.ViewModels.AllGroups

<!--at if (Model.AddGroups != null)
{ -->
    <h2>Groups to be Added</h2>

    <table id="AddGroupList">
        <thead>
            <tr>
                <th>
                    Name
                </th>
                <th>
                    Until
                </th>
                <th>
                    Action
                </th>
            </tr>
        </thead>
        <tbody>
            @foreach (var Group in Model.CurrentGroups)
            { 
                <tr>
                    <td>
                        @Html.DisplayFor(model=> Group.GroupName)
                    </td>
                    <td>
                        @Html.DisplayFor(model=> Group.EndDate)
                    </td>
                    <td>
                        @Html.DisplayFor(model=> Group.bRemove)
                    </td>
                    <td>
                        @if (AuthCheck.CheckUser(new HttpContextWrapper(HttpContext.Current), oRoles.StaffChangeRequest) || 
                        AuthCheck.CheckUser(new HttpContextWrapper(HttpContext.Current), oRoles.StudentChangeRequest))
                        { 
                            <span>@Html.ActionLink("Remove", "RemoveGroup", new { id = Group.ID })</span>
                        }
                    </td>
                </tr>
            }
        </tbody>
    </table>

我确实需要将 IDnum 传递给每个局部视图,以便为该用户加载当前模型。

现在的问题是……

我是否最好将组添加到 SearchedUser 模型中并在每次将组添加到用户时重新加载整个模型?

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-4 razor


    【解决方案1】:

    我不确定我是否理解您的问题。 如果您询问如何渲染包含两个具有不同模型的局部视图调用的视图,那么您应该有一个主视图,其视图模型包含两个其他视图模型。

    class MainViewModel
    {
    PartialOneViewModel {get;set;}
    PartialTwoViewModel {get;set;}
    }
    
    class PartialOneViewModel
    {
    // props
    }
    
    class PartialTwoViewModel
    {
    // props
    }
    

    主视图模型应具有: @model 主视图模型

    partials 应该有自己的视图模型。 您的帖子应该收到带有两个部分的“MainViewModel”。

    【讨论】:

    • 好的,这就回答了这个问题……但话虽如此,当我向我的局部视图添加新项目时,我是否每次都将 mainviewmodel 传回,然后使用该 mainviewmodel 更新整体视图?
    • 这取决于你。您可以在每次更改时回发“主模型”,也可以创建两个嵌套表单并发布特定表单。您也可以通过 ajax 方式处理此问题,并在帖子中准确添加您想要的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多