0

ユーザーが目的のユーザー名を入力して保存できるテキストボックスがあります。ユーザーがそれを保存し、たまたまプロファイル ページに再度アクセスすると、表示するために最後に保存したユーザー名がテキスト ボックスに入力され、ユーザーはそれを変更して再保存することができます。私はこれにかなり慣れていないので、これを適切に開始する方法がわかりません。vs 2012 asp.net mvc 4 c# を使用しています。これまでの私のコードは次のとおりです。

    @model School.Models.StudentNameModel

    @using (Html.BeginForm("_StudentNamePartial", "Profile")) {
    @Html.AntiForgeryToken()
    @Html.ValidationSummary()
<fieldset>
    <ol>
        <li>
            @Html.LabelFor(m => m.StudentName)
            @Html.DisplayFor(m => m.StudentName)
            @Html.TextBoxFor(m=>m.StudentName)
            <button type="button" value="save" />
        </li>
    </ol>

</fieldset>

}

これは私のモデルです:

 public class StudentNameModel
{
    [Display(Name = "Student Name")]
    public string StudentName{ get; set; }
}

私のコントローラー:

GET - データベースが存在する場合、データベースから学生の名前を取得します。

[HttpPost]
    public ActionResult _StudentNamePartial(int id)
    {
        id = WebSecurity.CurrentStudentId;
        var model = new StudentNameModel();
        using (var db = new StudentsDataContext())
        {
            var result = (from u in db.Students
                         where u.ID == id
                         select u.StudentName).FirstOrDefault();
            if(result != null)
                model.StudentName= result;
        }
        return View(model);
    }

POST - これは、学生の新しいユーザー名を保存する場所です

[HttpPost]
    public ActionResult _StudentNamePartial(StudentNameModel model)
    {
        if (ModelState.IsValid)
        {
           using (var db = new StudentDataContext())
           {
               try
               {

               }
               catch (Exception)
               {

                   throw;
               }
           }
            return RedirectToAction("ProfileAccount");
        }
        return View(model);
    }

また、ユーザー名を表示しているときにメソッドにヒットせずAction、オブジェクト参照がnullであると常に報告されるという問題があります。どんな助けでも素晴らしいでしょう。ありがとう

4

1 に答える 1

0

大きなビューの一部としてコントローラー アクションから部分ビューをレンダリングしようとしているようです。この場合、部分ビューはProfileAccountビュー内でレンダリングする必要があります。

コントローラーとビューを次のように構成できます (大まかなアウトライン):

ProfileAccount ビュー モデル:

public class ProfileAccountView 
{
    public StudentNameModel StudentName { get; set; }   
}

プロファイル コントローラ:

[HttpGet]
public ActionResult ProfileAccount(int id)
{
    // Get whatever info you need and store in a ViewModel
    var model = new ProfileAccountView();

    // Get the student info and store within ProfileAccountView
    // Do your database reads
    model.StudentName = new StudentNameModel { StudentName = result };

    return View(model);
}

[HttpPost]
public ActionResult ProfileAccount(ProfileAccountView profile)
{
    // Do whatever processing here
}

プロファイルアカウント ビュー

@model School.Models.ProfileAccountView

@using (Html.BeginForm("ProfileAccount", "Profile")) 
{
    @Html.RenderPartial('_StudentNamePartial', Model.StudentName);
    <button type="button" value="save" />
}

_StudentNamePartial 部分ビュー

@model School.Models.StudentNameModel

<fieldset>
    <ol>
        <li>
            @Html.LabelFor(m => m.StudentName)
            @Html.TextBoxFor(m=>m.StudentName)
        </li>
    </ol>
</fieldset>
于 2013-02-07T16:59:34.507 に答える