1

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

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

一般设置 电子邮件设置

详细地说,使用 ASP.NET MVC 4 生成这些视图的最有效(DRY)方式是什么?如您所见,视图以相同的方式构建,仅在标题和表单字段方面有所不同。必须有一些简单的方法来重用视图中的公共结构,并为它们中的每一个简单地专门化它,但我不知道该怎么做。

解决方案

弗莱姆的回答让我走上了正确的轨道,但我对其进行了一些修改,特别是通过嵌套设置布局。

设置布局:

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

个人设置视图:

@model PersonalSettingsModel
@{
  Layout = "_SettingsLayout.cshtml";
  ViewBag.SettingsSection = "Account";
}

@Html.EditorForModel()
4

1 回答 1

0

我建议为设置页面使用自定义布局,为每个设置视图使用模型,每个都扩展相同的基类。像这样的东西(请注意,我没有测试过这段代码——它是徒手的):

基本型号:

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 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>
于 2012-08-16T09:13:52.513 回答