Удаленная проверка в MVC3.0 - PullRequest
       3

Удаленная проверка в MVC3.0

0 голосов
/ 26 декабря 2011

У меня есть удаленная проверка по одному из полей класса:

    [Remote("IsCityUnique", "City", AdditionalFields = "Onvan", HttpMethod = "POST", ErrorMessage = "City name isn't unique.")]
    public string CityName
    {
        get { return _CityName; }
        set
        {
            if (_CityName != value)
            {
                _CityName = value;
                OnPropertyChanged("CityName");
            }
        }
    }
    private string _CityName;

И в моем контроллере:

    public JsonResult IsCityUnique(string Cityname)
    {
        ....
        List<City> citylist = cr.GetAll().ToList();
        return Json(!citylist .Any(c => c.CityName== Cityname));
    }

«IsCityUnique» будет срабатывать правильно, но метод проверки в Edit & Create отличается: как я могу запустить правильный метод, когда я нахожусь в режиме создания или режиме редактирования? Я думаю, что если я смогу передать имя действия этому методу, то смогу управлять им. Но я не знал, как передать имя действия удаленному методу. В противном случае, вы можете предложить мне правильный путь?

Ответы [ 2 ]

1 голос
/ 27 декабря 2011

Поэтому, хотя я бы по-прежнему рекомендовал использовать отдельную ViewModel для редактирования и создания, которая имеет больше архитектурных преимуществ, чем просто удаленная проверка, вы должны иметь возможность делать то, что вы хотите, используя свойство AdditionalFields, которое вы, кажется, используете в свойстве, но не в своем обработчике проверки.

Я не в состоянии проверить это, но если вы действительно хотели бы сделать это таким образом, то вы могли бы сделать следующее:

К вашей ViewModel добавьте:

public bool IsEditing { get; set; }

Когда вы выполняете действие по редактированию, установите для этого параметра значение true (и false для действия по созданию).

[Remote("IsCityUnique", "City", AdditionalFields = "IsEditing", HttpMethod = "POST", ErrorMessage = "City name isn't unique.")]
public string CityName { get; set; }

По вашему мнению, вам может потребоваться отрендерить @Html.HiddenFor(m=>m.IsEditing), и тогда ваш обработчик проверки должен стать:

public JsonResult IsCityUnique(string Cityname, bool IsEditing)
{
    if(editing) { /* Do editing Logic */ }
    else { /* Do other logic. */ }
}

Нечто подобное должно работать, но я сейчас не в состоянии проверить это. Но вам, вероятно, будет лучше наблюдать разделение интересов и выяснить, как распределить обязанности между редактированием и созданием объекта домена.

1 голос
/ 27 декабря 2011

Используйте две модели представления, каждая из которых имеет свое имя свойства с соответствующим методом удаленной проверки.Это еще одна из многих причин просто использовать модели представления для каждого представления.Таким образом, у вас должна быть модель представления для Create и для Edit.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...