2

Html.EditorFor()から予期しない動作が発生します。

私はこのコントローラーを持っています:

[HandleError]
public class HomeController : Controller
{
    [AcceptVerbs(HttpVerbs.Get)]
    public ActionResult Lister()
    {
        string[] values = { "Hello", "world", "!!!" };

        return View(values);
    }

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Lister(string[] values)
    {
        string[] newValues = { "Some", "other", "values" };

        return View(newValues);
    }
}

そして、これはこれらの両方のために働くことを意図している私の見解です:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<string[]>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    Lister
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <h2>Lister</h2>

    <% using (Html.BeginForm()) { %>
        <% foreach (string value in Model) { %>
            <%= value %><br />
        <% } %>
        <%= Html.EditorForModel() %>
        <input type="submit" value="Append Dashes" />
    <% } %>

</asp:Content>

問題は、ポストバックがビューから作成された場合、正しいアクションが実行されても、foreachループが新しい値を出力している間、テキストボックスには元のhelloworldデータが表示されることです。ASP.NETの何かが、テキストボックスの更新からモデル値をオーバーライドしていて、同じ古い値を表示しているように感じます。

IEnumerableを使用してEditorForを学習しようとしたときに、この問題が見つかりました。

4

1 に答える 1

2

これは問題ではなく、正常な動作です。すべてのヘルパーはそのように機能します。バインディングを実行するために、最初に投稿された値を確認し、次にモデルを確認します。つまり、コントローラーアクションでモデルを変更しても、最初に投稿された値が使用されます。

関連する質問:

于 2010-03-30T17:09:04.870 に答える