Asp.net mvc 如何实现只改变wrt的多个设置视图。数据?

Asp.net mvc 如何实现只改变wrt的多个设置视图。数据?,asp.net-mvc,user-interface,asp.net-mvc-4,Asp.net Mvc,User Interface,Asp.net Mvc 4,我想知道我应该如何在ASP.NET MVC 4中实现一个多方面的帐户设置UI,也就是说,每个设置方面都有一个视图(例如,常规设置、电子邮件地址…),您可以在选项卡栏的帮助下在其中导航。每个设置视图共享相同的布局,仅在数据方面有所不同,即每个视图都有一个具有不同字段的表单 这些模型应该说明我的意思: 更详细地说,使用ASP.NET MVC 4生成这些视图的最有效(干式)方法是什么?正如您所看到的,视图是以相同的方式构造的,只是在表单的标题和字段方面有所不同。必须有一些简单的方法来重用视图中的公

我想知道我应该如何在ASP.NET MVC 4中实现一个多方面的帐户设置UI,也就是说,每个设置方面都有一个视图(例如,常规设置、电子邮件地址…),您可以在选项卡栏的帮助下在其中导航。每个设置视图共享相同的布局,仅在数据方面有所不同,即每个视图都有一个具有不同字段的表单

这些模型应该说明我的意思:

更详细地说,使用ASP.NET MVC 4生成这些视图的最有效(干式)方法是什么?正如您所看到的,视图是以相同的方式构造的,只是在表单的标题和字段方面有所不同。必须有一些简单的方法来重用视图中的公共结构,并为每个视图专门化它,但我不确定如何做到这一点

解决方案 弗莱姆的回答让我走上了正确的轨道,但我对它做了一点修改,特别是通过嵌套设置布局

设置布局:

@model SettingsModelBase
@{
  Layout = "~/Views/Shared/_Layout.cshtml";
  ViewBag.Title = string.Format("Settings - {0}", ViewBag.SettingsSection);
}

<h1>@Model.SelectedPage.ToString()</h1>
<div class="account-section">
  @using (Html.BeginForm())
  {
    @RenderBody()
    <input type="submit" value="Update" />
    <input type="reset" value="Cancel" />
  }
</div>

我建议为设置页面使用自定义布局,为每个设置视图使用模型,每个视图都扩展相同的基类。类似这样的内容(注意,我还没有测试这段代码-它是徒手编写的):

基本型号:

public abstract class SettingsModelBase
{
    public SettingsPageEnum SelectedPage { get; set; }
}
个人详细信息设置模式:

public class PersonalSettingsModel : SettingsModelBase
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Location { get; set; }
}
视图:

@model个性化设置模型
@{
Layout=“SettingsLayout.cshtml”;
}
@使用(Html.BeginForm())
{
@LabelFor(m=>m.FirstName)
@EditorFor(m=>m.FirstName)
@LabelFor(m=>m.FirstName)
@EditorFor(m=>m.FirstName)
@LabelFor(m=>m.FirstName)
@EditorFor(m=>m.FirstName)
}
布局:

@model SettingsModelBase

<html>
    <head>
    </head>
    <body>
        @Model.SelectedPage.ToString()
        <div id="settingsdiv">
            @RenderBody()
        </div>
    </body>
</html>
@模型设置模型库
@Model.SelectedPage.ToString()的
@RenderBody()

你的问题到底是什么?@SergRogovtsev看到我编辑的问题,我已经详细阐述了我想弄明白的。你已经尝试了什么?您是否尝试过使用layours/母版页?您的标签是服务器端还是客户端处理的?@SergRogovtsev我还没有尝试过任何特别的方法,因为我不确定该采取哪种方法。我一直在想,一个通用的“设置”布局是否是一个开始。选项卡在服务器端处理,即它们链接到每个视图。@SergRogovtsev您认为“设置”布局是正确的方法吗?我以前没有写过嵌套布局,只针对整个网站。谢谢,我会给你一个机会,然后再给你回复!我对你的答案进行了一些编辑,以反映我是如何通过嵌套布局(这样我就有了顶级网站布局和嵌套设置布局)得出答案的。@aknuds1我拒绝了你的编辑,因为这是一个相当彻底的改变。你在这里发布关于你如何解决问题的反馈非常好,但是最好自己把它添加为答案。@Marijn好的,我不完全确定是发布一个新的答案还是修改这个让我走上正轨的答案更好。我将在我的问题中添加有关我如何修改解决方案的信息。更新您的问题也可以;就像回答你自己的问题一样。
@model PersonalSettingsModel
@{
    Layout = "SettingsLayout.cshtml";
}
@using(Html.BeginForm())
{
    <div>
        @Html.LabelFor(m => m.FirstName)
        @Html.EditorFor(m => m.FirstName)
        @Html.LabelFor(m => m.FirstName)
        @Html.EditorFor(m => m.FirstName)
    </div>
    <div>
        @Html.LabelFor(m => m.FirstName)
        @Html.EditorFor(m => m.FirstName)
    </div>
    <input type="submit" value="Save" />
}
@model SettingsModelBase

<html>
    <head>
    </head>
    <body>
        @Model.SelectedPage.ToString()
        <div id="settingsdiv">
            @RenderBody()
        </div>
    </body>
</html>