Ограничение удаленной проверки для метода редактирования контроллера
У меня есть модель для регистрации
мой модельный класс
public class RegisterViewModel
{
[Required]
[StringLength(100, ErrorMessage = "Please enter a minimum of {2} characters", MinimumLength = 6)]
[DisplayName("University ID")]
[Remote("doesusernameExist", "HEC",null, ErrorMessage = "usr name is allready exist", HttpMethod = "POST")]
public string usrname { get; set; } }
мой класс контроллера JSON
[HttpPost]
public JsonResult doesusernameExist(string usrname)
{
var institute = db.Institutes.Find(HEI_ID);
return Json(institute == null);
}
Для создания нового пользователя и редактирования пользователя я использую модель выше. поэтому, не создавая другую модель, я хочу отключить вызывающий метод didusernameExist в методе редактирования.
2 ответа
Решение
Сначала в режиме редактирования отключите проверку на стороне клиента для username
:
@Html.TextBoxFor(m => m.username, new { @data_val = "false" })
Второе в правке "Редактировать сообщение" удалить результат проверки для username
от ModelState
:
public ActionResult EditUser([Bind(Exclude = "usrname")]RegisterViewModel model)
{
ModelState.Remove("username");
if (ModelState.IsValid)
{
.
.
.
Сначала добавьте скрытое поле в View как:
@Html.hidden("PreviousUsername", Model.usrname)
В вашем классе.cs добавьте следующее:
[Remote("doesusernameExist", "HEC", ErrorMessage = "usr name is allready exist", AdditionalFields = "PreviousUsername")]
public string usrname { get; set; }
Метод действия вашего контроллера должен быть таким:
public JsonResult doesusernameExist(string usrname, string PreviousUsername)
{
if(usrname==PreviousUsername)
{
return true;
}
var institute = db.Institutes.Find(HEI_ID);
return Json(false, JsonAlloBehaviour.AllowGet);
}