Похоже, что проверка моего клиента не выполняется должным образом.
На моем экране входа в систему, когда я устанавливаю свое имя пользователя и пароль и отправляю, форма очищается, и появляется сообщение проверки для обязательных полей, и форма не всегда отправляется. почему проверка очищает мои поля и говорит, что они пусты?
также иногда форма публикуется, но с пустыми полями, поэтому на сервере не удается выполнить привязку модели
еще более странно то, что я отключил проверку на стороне клиента, но на моем производственном сервере все равно не получается
В dev все нормально
Обновление:
мои действия уже отделены, даже разные имена действий
[HttpGet]
public ActionResult LogOn()
{
LogOnModel model = new LogOnModel() { UserName = "", Password = "" };
return View(model);
//return View();
}
[HttpPost]
public ActionResult LogIn(LogOnModel model, FormCollection fcol/*, string returnUrl*/)
{
//Request.Form.Count
StringBuilder sb = new StringBuilder();
sb.Append("<br/>Form collection: ");
if (Request.Form.Count > 0)
{
NameValueCollection form = Request.Form;
sb.Append("<Form collection>");
for (int i = 0; i < fcol.Count; i++)
sb.AppendFormat("{0}:{1},", fcol.AllKeys[i].ToString(), fcol[i].ToString());
sb.Append("</Form collection>");
}
sb.Append("<br/>Form : ");
if (Request.Form.Count > 0)
{
NameValueCollection form = Request.Form;
sb.Append("<form>");
for (int i = 0; i < form.Count; i++)
sb.AppendFormat("{0}:{1},", form.AllKeys[i].ToString(), form[i].ToString());
sb.Append("</form>");
}
sb.Append("<br/>QueryString : ");
if (Request.Form.Count > 0)
{
NameValueCollection form = Request.QueryString;
sb.Append("<QueryString>");
for (int i = 0; i < form.Count; i++)
sb.AppendFormat("{0}:{1},", form.AllKeys[i].ToString(), form[i].ToString());
sb.Append("</QueryString>");
}
if (model != null)
{
sb.Append("<br/>Profile(ProfileModel m) : ");
sb.AppendFormat("m.username = {0}, m.password = {1}", model.UserName, model.Password);
}
if (!ModelState.IsValid)
{
sb.Append("<br/>Model errors :");
var errors = from key in ModelState
let errorList = ModelState[key.Key].Errors
where errorList.Any()
select new
{
Item = key.Key,
Value = key.Value,
errorList
};
foreach (var errorList in errors)
{
sb.AppendFormat(@"<br/>MODEL ERROR: [{0}] value:'{1}' ", errorList.Item, errorList.Value);
foreach (var error in errorList.errorList)
{
sb.AppendFormat(" ERROR message: [{0}] exception : '{1}'", error.ErrorMessage, error.Exception);
}
}
}
Response.Write(sb);
//return new ContentResult();
if (model != null)
Log(new Exception(string.Format("model username : {0}, password : {1}, request[username] {2} , request[password] : {3}", model.UserName, model.Password, Request["UserName"], Request["Password"])));
try
{
if (ModelState.IsValid)
{
Log(new Exception(string.Format("ModelState {0}", ModelState.IsValid)));
Log(new Exception(string.Format("credentials {0},{1}", model.UserName, model.Password)));
if (MembershipService.ValidateUser(model.UserName, model.Password))
{
Log(new Exception(string.Format("MembershipService.ValidateUser {0},{1}", model.UserName, model.Password)));
FormsService.SignIn(model.UserName, false/* model.RememberMe*/);
Log(new Exception(string.Format("FormsService.SignIn {0},{1}", model.UserName, model.Password)));
//if (Url.IsLocalUrl(returnUrl))
// return Redirect(returnUrl);
//else
return RedirectToAction("Index", "Home");
}
else
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
catch (Exception ex)
{
Elmah.SqlErrorLog.GetDefault(System.Web.HttpContext.Current).Log(new Elmah.Error(ex, System.Web.HttpContext.Current));
}
// If we got this far, something failed, redisplay form
return View("LogOn", model);
}
и да, на моей странице бритвы есть сводка проверки
@Html.ValidationSummary(false, @LocalDealsResources.Strings.LogOnUnsuccessful)
@using (Html.BeginForm("LogIn", "Account"))
{
<div>
<fieldset>
<legend>Account Information</legend>
<div class="editor-label">
@Html.LabelFor(m => m.UserName)
</div>
<div class="editor-field">
@Html.TextBoxFor(m => m.UserName, new { style = " width:200px" })
@Html.ValidationMessageFor(m => m.UserName)
</div>
<div class="editor-label">
@Html.LabelFor(m => m.Password)
</div>
<div class="editor-field">
@Html.PasswordFor(m => m.Password, new { style = " width:200px" })
@Html.ValidationMessageFor(m => m.Password)
</div>
<p>
<input type="submit" value="@LocalDealsResources.Strings.LogOn" />
</p>
</fieldset>
</div>
}
попробуй форму
http://dealze.com.sapin.arvixe.com/Account/Logon