1

下面的变量email被使用了两次:首先在<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>

当我将上述表单提交到服务器并故意输入格式错误的电子邮件地址时,该表单将返回给我并显示一条错误消息(为清楚起见,此处省略)。email 值将在 HTML 中出现两次 - 都与上面的代码一致。唯一的问题是<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>

这是怎么发生的?同一个变量,在代码中使用了两次,只赋值一次,怎么能提供两个不同的值???

4

2 回答 2

1

Html.TextBox 使用该字段的先前值,如果可以从 ModelState 获得(这在请求期间由 MVC 内部保留)。清除 ModelState(完全或为此字段)以强制使用“电子邮件”变量值。

于 2010-01-12T19:48:28.040 回答
0

您可以运行第二个线程,其中第二个线程修改电子邮件的值。或者在第一个和第二个输出之间发生的一些操作可能会覆盖值(或指针,如果 ASP.NET 允许直接指针操作 - 我对 ASP.NET 不是很熟悉)。或者 Html.TextBox 方法可能会改变值(这是自定义实现,还是标准库的扩展?)。

于 2010-01-12T18:29:46.640 回答