1

以下の変数emailは 2 回使用されます。最初は<p>タグ内で使用され、次に a の値として渡されますtextbox

質問: 両方のオカレンスで同じテキストが生成されますか? 信じられないかもしれませんが、それらは異なります。

#UserProfileEditForm form = (UserProfileEditForm)ViewData["form"];
#string email = form.email;
<p>Email: ${HttpUtility.HtmlEncode(email)} <a class="ajax edit" href="${editEmailUrl}">Edit</a></p>
#if (form.editEmail)
#{
    <form name="f_email" action="${editEmailUrl}" ....>
        ${Html.TextBox("form.email", email, new { @class="ajax string"}) }
    </form>
#}
</div>

上記のフォームをサーバーに送信し、故意に不正な形式のメール アドレスを入力すると、エラー メッセージが表示されてフォームが戻ってきます (わかりやすくするためにここでは省略しています)。電子メールの値は HTML に 2 回表示されます。すべて上記のコードに沿っています。唯一の問題は、<p>タグ内の電子メールの値がテキスト ボックスの値と異なることです。出力例は次のとおりです。

<p>Email: test@testing.test <a class="ajax edit" href="...">Edit</a></p>
    <form class="ajax edititem" name="f_email" id="f_email" .....>
        <input class="ajax string" id="form_email" type="text" value="changed````@testing.gov" />
    </form>
</div>

これはどのように起こりますか?コードで 2 回使用され、1 回だけ割り当てられた同じ変数が、2 つの異なる値をどのように提供できるのでしょうか?

4

2 に答える 2

1

Html.TextBox は、ModelState から入手可能な場合、フィールドの以前の値を使用します (これは、要求時に MVC 内部によって保持されます)。ModelState を (完全に、またはこのフィールドに対して) クリアして、"email" 変数値の使用を強制します。

于 2010-01-12T19:48:28.040 に答える
0

2 番目のスレッドが実行されている場合、2 番目のスレッドが email の値を変更します。または、最初の出力と 2 番目の出力の間で発生する操作によって、値 (または、ASP.NET で直接ポインター操作が許可されている場合はポインター - 私は ASP.NET に詳しくありません) が上書きされる可能性があります。または、Html.TextBox メソッドが値を変更している可能性があります (これはカスタム実装ですか、それとも標準ライブラリの拡張ですか?)。

于 2010-01-12T18:29:46.640 に答える