3

非常に単純な状況です。これが私のモデルです。

public class Comment
{
    [Required]
    public string Name { get; set; }
    [Required]
    public string Text { get; set; }

}

これが私のコントローラーです:

public class CommentController : Controller
{
    //
    // GET: /Comment/Create

    public ActionResult Create()
    {
        return View();
    } 

    //
    // POST: /Comment/Create

    [HttpPost]
    public ActionResult Create(FormCollection collection)
    {
        Comment new_comment = new Comment();

        if (TryUpdateModel(new_comment))
        {
            return View(new Comment()); //problem is there
        }
        else
        {
            return View(new_comment);
        }

    }



}

そして、これが私の標準的な生成された強い型のビューです:

@model test.Models.Comment

@{
    ViewBag.Title = "Create";
}

<h2>Create</h2>

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Comment</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.Name)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Name)
            @Html.ValidationMessageFor(model => model.Name)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Text)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Text)
            @Html.ValidationMessageFor(model => model.Text)
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

問題は:有効なデータを入力すると、をTryUpdateModel()返しtrue

return View(new Comment());

コメントの新しい空のインスタンスが渡されるため、空のフォームを表示する必要がありますが、以前に入力した値を含むフォームが表示されます。

理由を教えてください。空のフォームを再度表示する方法は?

4

1 に答える 1

4

モデル状態をクリアします。

if (TryUpdateModel(new_comment))
{
    ModelState.Clear();
    return View(new Comment()); //no more problem here
}

すべてのHTMLヘルパーは、値をレンダリングするときに最初にModelStateを確認し、その後モデルで確認します。


または、 Redirect-After-Postパターンをより適切かつ適切に使用します(つまり、POSTが成功した後にリダイレクトします)。

if (TryUpdateModel(new_comment))
{
    return RedirectToAction("Create");
}
于 2012-04-15T09:22:33.933 に答える