1

いろいろなチュートリアルを見てみましたが、自分の考えていることをどうやって実行していきたいのか、とても戸惑い、自分の考えを明確にするための助けが必要です。

Profile;というかみそりのビューページがあります。そのプロフィールページには、4つの異なるセクションがあります。

  1. パスワードの変更
  2. セットアップパスワード
  3. ユーザー名
  4. バイオグラフィー。

4つのセクションのそれぞれを部分的なセクションとして作成することを考えていました。各セクションには、ユーザーが情報を追加または変更できるようにするテキストボックスと保存ボタンがあります。

@model Projects.Models.PasswordModel
@{
    ViewBag.Title = "Profile Account";
}

<hgroup class="title">
    <h1>@ViewBag.Title.</h1>
</hgroup>

<p class="message-success">@ViewBag.StatusMessage</p>


<div id="wrap">
    <div id="right">
        @if (ViewBag.HasLocalPassword)
        {
            @Html.Partial("_ChangePasswordPartial")
        }
        else
        { 
            @Html.Partial("_SetPasswordPartial")
        }
    </div>

    <div id="left">
        @Html.Partial("_UserNamePartial")
        @Html.Partial("_BiographyPartial")
    </div>
</div>

メインビューページを適切に設定し、4つのセクションを適切に表示して機能させるにはどうすればよいですか?それらを表示させましたが、ユーザー名に加えた変更を保存しようとすると、別のモデル(伝記モデルなど)でエラーが発生します。繋がっていないはずなのに繋がっているような気がします。私はこれをどうやって行うかについての明確なチュートリアルを本当に探しています、そしてうまくいけば、これを理解した後にそれを作ることができるでしょう。

これは私のユーザー名の一部です

@model Project.Models.UsernameModel

@using (Html.BeginForm("_UsernamePartial", "Account")) {
    @Html.AntiForgeryToken()
    @Html.ValidationSummary()

       <p>Username</p>
       @Html.TextBoxFor(m=>m.Username)

    <button class="btn btn-small" type="submit" value="Save Username">Save</button>
}

私のコントローラー

得る:

public ActionResult _UsernamePartial()
        {
            var usernameModel = new UsernameModel();
            using (var db = new DataContext())
            {
                usernameModel.Nickname = (from u in db.Users
                                              where u.ID == WebSecurity.CurrentUserId
                                              select u.Username).FirstOrDefault();
            }
            return View(usernameModel);
        }

役職:

[HttpPost]
        public ActionResult _UsernamePartial(UsernameModel usernameModel, string returnUrl)
        {
            if (ModelState.IsValid)
            {
                using (var db = new DataContext())
                {
                     User user = db.Users.FirstOrDefault(m => m.ID == WebSecurity.CurrentUserId);
                     user.Username = usernameModel.Username;
                     db.SaveChanges();
                 }
                return RedirectToAction("_UsernamePartial");
            }
            return View(returnUrl);
        }

あなたの助けは大歓迎です。

4

1 に答える 1

1

ビューが正しいモデルに入力されていることを確認する必要があります。現在、ビューはPasswordModelモデルに入力されています。モデルは、ページの1つのセクションのように見えます。各セクションのモデルで構成されるモデルを作成すると、これが簡単になります。

class ProfileModel {
    PasswordModel Password { get; set; }
    BiographyModel Biography { get; set; }
    ...
}

次に、プロファイルビューをに入力するように設定しますProfileModel。次に、各モデルをパーシャルに渡すことができます。

@Html.Partial("_BiographyPartial",Model.Biography)

また、_BiographyPartialの例は次のようになります。

@model Projects.Models.BiographyModel
...
<h1>@Model.SomeBiographyProperty</h2>

検証がいくつかあると仮定して、この設定で正しく機能していることを注意深く確認する必要があります。

または、すべてのデータを1つのフラットモデルに入れて、モデル全体を各部分ビューに渡すこともできます。

編集:部分的なビューは、コントローラーやアクションによってサポートされていません。これらは、呼び出し元のビューから渡されたデータを使用してレンダリングされるビューです。あなたが今やろうとしていることは、_UsernamePartialアクションをレンダリングすることです。あなたがそれをしたいなら、あなたはAction代わりに使うことを試みることができますPartial

<div id="left">
    @Html.Action("_UserNamePartial")
    ...
</div>

そして、そのアクションを部分ビューとしてレンダリングします。

public ActionResult _UsernamePartial()
{
    var usernameModel = new UsernameModel();
    using (var db = new DataContext())
    {
        usernameModel.Nickname = (from u in db.Users
                                  where u.ID == WebSecurity.CurrentUserId
                                  select u.Username).FirstOrDefault();
    }
    return PartialView(usernameModel);
}
于 2013-02-11T03:35:03.707 に答える