Я использую пользовательское членство asp.net в MVC 3.0
Регистрация работает без проблем, но во время тестирования я обнаружил одну проблему. Если я поставил неправильное значение, например, пароль, который не соответствует настройкам членства asp.netкритерии, то я получаю ошибку проверки сервера, говоря, что мне нужно исправить:
Your account wasn't created. Please correct the errors and try again.
The password provided is invalid. Please enter a valid password value.
Итак, если поставить другой пароль и нажать кнопку Отправить, я получаю эту ошибку:
Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[NullReferenceException: Object reference not set to an instance of an object.]
System.Web.Security.MachineKey.Decode(String encodedData, MachineKeyProtection protectionOption) +269
Microsoft.Web.Mvc.MachineKeyWrapper.Decode(String encodedData, MachineKeyProtection protectionOption) +10
Microsoft.Web.Mvc.MvcSerializer.Deserialize(String serializedValue, SerializationMode mode, IMachineKey machineKey) +80
[SerializationException: Deserialization failed. Verify that the data is being deserialized using the same SerializationMode with which it was serialized. Otherwise see the inner exception.]
Microsoft.Web.Mvc.MvcSerializer.Deserialize(String serializedValue, SerializationMode mode, IMachineKey machineKey) +232
Microsoft.Web.Mvc.MvcSerializer.Deserialize(String serializedValue, SerializationMode mode) +25
Microsoft.Web.Mvc.DeserializingModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +128
.....
любые идеи, чтоэто может быть?
мой контроллер выглядит так:
public virtual ActionResult Register(RegisterModel model, [Deserialize]List<MyModelState> myModelState)
{
//to stuff
//if error save ModelStt in temp data to render it back to hidden form value
TempData["MyModelState"] = myModelState;
}
С точки зрения, я делаю это:
@using (Html.BeginForm())
{
List<MyModelState> hidden = TempData["MyModelState"] as List<MyModelState>;
if (hidden != null) //never null
{
@Html.Serialize("MyModelState", hidden)
}
}
Я думаю, что проблема с [Deserialize]List<MyModelState>
но я не могу понять, почему это может произойти, потому что скрытое значение представляет этот объект никогда не нулевым и всегда присутствует в форме:
<input name="MyModelState" type="hidden" value="2CF80623577311BA401E41727261794F66537562736372697074696F6E44657461...../>
Я проверяю значение MyModelState
в форме до появления ошибки, и когдапроисходит то, что я нажимаю кнопку браузера назад, чтобы убедиться, что скрытое значение находится в форме и равно значению, которое было до ошибки, и все в порядке, не смог увидеть что-тотам плохо.