2012-02-27 2 views
0

У меня есть несколько входов на моей странице. Я хотел бы сохранить изменения в модели при размытии ввода, так как я изменяю значение каждого входа, которое он получает обратно на сервер, например, контакты Google.Редактирование полей формы через ajax и .net mvc

<input id="FirstName" name="FirstName">Jack</input> 

Я создаю событие размытия, используя jquery, чтобы отправить значение обратно на сервер. Он размещает структуру с именем ввода, значением и идентификатором объекта.

$.post(url, { id: "2", key: "FirstName", value: "Jack" }, successFuction); 

В мой контроллер у меня есть:

public ActionResult EditField(int id, string key, string value) 

Я затем получить объект, используя EntityFramework с идентификатором. Затем я хотел обновить свойство на модели для поля.

var entity = _db.Get(id); 
entity[key] = value; 
return Content "Success"; 

Который я, очевидно, не могу сделать! Единственный способ, который я могу придумать, - это несколько методов для каждого поля, поэтому EditName, EditAddress и т. Д., Который кажется неправильным. Я хочу, чтобы этот метод мог обрабатывать каждое свойство модели.

Что такое лучший способ структурирования контроллера вместо написания нескольких методов для каждого отдельного поля?

+0

'Что такое хороший способ достичь того, что я хочу делать?' -> что вы хотите сделать? –

+0

Сохраните значение. Я не хочу писать метод для каждого поля. – Terry

+0

Ваш вопрос, похоже, больше связан с технологией доступа к базе данных, которую вы используете (EF, я думаю), и jQuery, чем ASP.NET MVC. Пожалуйста, отметьте свой вопрос соответствующим образом. Я не вижу, что это вообще связано с ASP.NET MVC. –

ответ

1
  1. Вы можете разместить всю форму (например, имя, фамилию и т. Д.) При каждом размытии для любого из ваших полей (это должно быть хорошо, поскольку вы сохраняете все изменения по мере того, как пользователь переходит к форме так или иначе). Если вы не действительно пытается сохранить байты, публикация всей формы кажется прекрасной.
  2. Вы можете просто разместить имя поля, а затем использовать отражение, чтобы найти свойство своего объекта и установить значение.
+0

Я даже не думал о публикации всей формы. Кажется, слишком сложно изменить одно поле. Разве использование рефлексии не будет действительно медленным? Плюс это кажется действительно взломанным для чего-то, что я думал бы было бы популярен для реализации – Terry

+0

@Terry - Лично я бы не использовал отражение, и я бы просто опубликовал всю форму.Он интуитивно понятен и прост в реализации, что всегда является победителем сценария для меня, если есть большой недостаток производительности. Как бы эти две ситуации выполнялись, вам придется тестировать, но если вы не работаете на сайте с большой пропускной способностью, то любое из этих двух решений будет работать отлично. –

0

Я думаю, что вы можете это сделать, если вы готовы моделировать объект в общем виде:

public class FieldEntity { 
    public int Id { get; set; } 
    public string Key { get; set; } 
    public string Value { get; set; } 
} 

Затем используйте его в контексте, как:

var fieldEntity = db.Find(id); 
fieldEntity.Key = key; 
fieldEntity.Value = value; 
db.SaveChanges(); 

Однако, обычно лучше структурировать данные способом, который имеет смысл. В примере, который вы описываете, похоже, что у вас может быть объект Person и Address. Итак, почему бы не иметь объект Person, который имеет свойство Address?

+0

Все дело в том, что один метод может обрабатывать все поля. Поэтому я мог бы отправить {ключ: «Адрес», значение: «Бла»} и обновить свойство адреса модели. – Terry

+0

Затем @ Ek0nomik указывает на правильное направление для вас. На полевом уровне вы можете использовать отражение. –