1

ASP.NET MVC 4 で多面的なアカウント設定 UI を実装する方法を考えています。つまり、各設定ファセット (一般設定、電子メール アドレスなど) ごとに 1 つのビューがあり、ヘルプを使用して間を移動します。タブバーの。各設定ビューは同じレイアウトを共有し、データのみが異なります。つまり、各ビューには異なるフィールドを持つフォームがあります。

これらのモックアップは、私が何を意味するかを示しているはずです:

一般設定 メール設定

詳しく説明すると、ASP.NET MVC 4 でこれらのビューを生成する最も効率的な (DRY) 方法は何ですか? ご覧のとおり、ビューは同じ方法で構築されており、タイトルとフォームのフィールドのみが異なります。ビューで共通の構造を再利用し、それぞれに特化する簡単な方法が必要ですが、その方法がわかりません。

ソリューション

flemの答えは私を正しい軌道に乗せましたが、特に設定レイアウトをネストすることで、少し修正しました。

設定レイアウト:

@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 に答える