Мне нравится пытаться использовать удаленную проверку, которую я вижу по этой ссылке: http://www.youtube.com/watch?v=Ll8VtDRj8L4
я следил за инструкцией, и это сработало, но проблема в том, что когда я пытаюсь добавить данные из ссылочной таблицы, проверка не будет работать
Модельный класс:
public partial class ms_student
{
public int ID { get; set; }
public string student_code{ get; set; }
public virtual ms_person ms_person { get; set; }
}
public partial class ms_person
{
public string name{ get; set; }
public string email { get; set; }
public virtual ms_student ms_student { get; set; }
}
Метаданные:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
namespace Test.Models
{
[MetadataType(typeof(personMD))]
public partial class ms_person
{
}
public class personMD
{
[Required(ErrorMessage = "Email is required")]
[EmailAddress(ErrorMessage = "Invalid Email Address")]
[Remote("CheckEmailExist", "Administrator", ErrorMessage = "Email Already Exist")]
public object email { get; set; }
}
}
контроллер:
public JsonResult CheckEmailExist(string email) // the error i think from email paramater, cause the video said to make the paramater exactly the same name...
{
return Json(!db.ms_person.Any(m => m.email == email), JsonRequestBehavior.AllowGet);
}
Просмотры:
@model Test.Models.ms_student
@using (Html.BeginForm("CreateStudent", "Administrator", FormMethod.Post,
new { enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@Html.TextBoxFor(model => model.student_code) //this one work and already tested
@Html.ValidationMessageFor(model => model.student_code)
@Html.TextBoxFor(model => model.ms_person.email) //if you inspect element on browser the NAME are ms_person.email and ID are ms_person_email
@Html.ValidationMessageFor(model => model.ms_person.email)
}
Я попытался изменить параметр JsonResult Controller paramater в (строка ms_person.email), но там ошибка упомянутого имени пространства электронной почты не найдена. Также попытался использовать (строка ms_person_email), не будет работать ни
я также тестировал с помощью student_code, поле student_code работает правильно, потому что атрибут student_code находится в одной и той же модели (ms_student), а не как электронная почта (ссылка на ms_person)
Вся работа по проверке метаданных, как и требуется на обеих моделях, поэтому я предполагаю, что ошибка указана в параметре JsonResult
большое спасибо
Измените свой метод действий, чтобы включить атрибут/свойство Bind Prefix
public JsonResult CheckEmailExist([Bind(Prefix="ms_person.email")]string email)
{
...
Просто измените его на
@Html.TextBoxFor(model => model.ms_person.email, new{@id="email", @name="email"})
name
attribute`
public JsonResult CheckEmailExist([Bind(Prefix="ms_person"]string email) {..