Spark очень странное поведение: одна переменная - два разных значения в одном и том же коде! - PullRequest
1 голос
/ 12 января 2010

Переменная 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 ]

1 голос
/ 12 января 2010

Html.TextBox использует предыдущее значение поля, если оно доступно из ModelState (это сохраняется внутренними компонентами MVC во время запроса). Очистите ModelState (полностью или для этого поля), чтобы принудительно использовать значение переменной «email».

0 голосов
/ 12 января 2010

Вы можете запустить второй поток, где второй поток изменяет значение электронной почты. Или какая-то операция, которая происходит между первым и вторым выходом, может перезаписывать значение (или указатель, если ASP.NET допускает непосредственное манипулирование указателем - я не очень знаком с ASP.NET). Или метод Html.TextBox может изменять значение (это пользовательская реализация или расширение стандартной библиотеки?).

...