Spark很奇怪的行为:一个变量 - 同一个代码中的两个不同的值!

时间:2010-01-12 18:20:51

标签: html asp.net-mvc spark-view-engine

以下变量email使用了两次:首先在<p>标记内,然后作为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中出现两次 - 全部符合上述代码。唯一的问题是<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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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