6

MVC 3 プロジェクトのビューに奇妙な問題があります。データ編集用の標準ビューがあります (テンプレートを使用して作成)。フォームを送信するときにNameプロパティを変更しますが、コントローラーからブラウザーに戻った後もlorem値が表示されます。なんで ?

    @using (Html.BeginForm())
    { 
        @Html.EditorFor(model => model.Name)
        <input type="submit" value="Save"  />
    }


    public ViewResult EditUserData(int id)
    {
        [...]
        UserData model = new UserData();
        model.Name = "lorem";            

        return View("~/Views/UserDetails.cshtml", model);
    }

    [HttpPost]
    public ViewResult EditUserData(UserData model)
    {
        model.Name = "ipsum";
        return View("~/Views/UserDetails.cshtml", model);    
    }

public class ControlUserData
{
    [...]

    [Required]
    [Display(ResourceType = typeof(Resources), Name = "UserNameFirst")]
    public string Name { get; set; }
}
4

4 に答える 4

8

ModelStatepost/get で値を変更する場合は、値を削除する必要があります。

[HttpPost]
public ViewResult EditUserData(UserData model)
{
    ModelState.Remove("Name");
    model.Name = "ipsum";
    return View("~/Views/UserDetails.cshtml", model);    
}

これは組み込みの MVC 動作です。実際のモデル値よりもコレクションHtml.Helpers内の値が優先されます。ModelState

これに関する良い記事があります: ASP.NET MVC Postbacks and HtmlHelper Controls ignoring Model Changes

于 2012-06-11T19:15:01.680 に答える
3

これは仕様によるものです。MVC は、ポスト アクションの処理時にユーザーが最初に送信したものを表示することを前提としています。この関連するスタック オーバーフローの投稿を参照してください。

于 2012-06-11T19:15:41.603 に答える