2009-08-08 2 views
3

Я понимаю, что с jEditable (http://www.appelsiini.net/projects/jeditable) вы можете делать редактирование на месте и POST измененной информации на URL.Использование jEditable с ASP.NET MVC (POSTing)

Мое представление ASP.NET MVC отображает кучу информации о модели, которую я хотел бы сделать на месте редактируемой. В настоящее время у меня есть два представления: одно текстовое представление и одно редактируемое представление, в котором форма полностью POSTED, а затем мое действие контроллера берет весь объект (собранный из имен элементов формы) в качестве параметра, обновляет объект и возвращает текст - только просмотр.

Однако, когда я переключаюсь на jEditable, я бы использовал только текстовое представление и POST для одного элемента за раз, а не для всего объекта. Как я могу создать одно действие контроллера, которое может принимать то, что jEditable является POSTING, а затем помещать его в соответствующее свойство моего объекта?

ответ

8

Там какая-то очень хорошо sample code here:

$("#myTextBox").editable('<%=Url.Action("UpdateSettings","Admin") %>', { 
      submit: 'ok', 
      cancel: 'cancel', 
      cssclass: 'editable', 
      width: '99%', 
      placeholder: 'emtpy', 
      indicator: "<img src='../../Content/img/indicator.gif'/>" 
     }); 


[AcceptVerbs("POST")] 
public ActionResult UpdateSettings(string id, string value) 
{ 
    // This highly-specific example is from the original coder's blog system, 
    // but you can substitute your own code here. I assume you can pick out 
    // which text field it is from the id. 
    foreach (var item in this.GetType().GetProperties()) 
    { 

     if (item.Name.ToLower().Equals(id, StringComparison.InvariantCultureIgnoreCase)) 
      item.SetValue(Config.Instance, value, null); 
    } 
    return Content(value); 
} 

Вы можете также нуждаться в этом:
http://noahblu.wordpress.com/2009/06/17/jeditable-note-dont-return-json-and-how-to-return-strings-from-asp-net-mvc-actions/

+1

Но что делать, если у меня есть большая модель, скажем, с 20 свойствами. Нужно ли мне 20 различных методов управления? Или, если я использую общую пару параметров id/value, как в вашем примере, как мне получить значение, автоматически обновляющее свойство права объекта? – Alex

+0

Исходный образец кода содержал в себе цикл ... Для этого должен быть цикл. Я восстановил цикл в примере кода. Вы можете просмотреть исходную запись в блоге. У вас на самом деле имеется 20 небольших текстовых редакторов на вашей веб-странице? Это кажется довольно необычным. –

+0

Да, для редактирования контактной информации (имя, телефон и т. Д.) – Alex

1

Вот что я делаю через рефлексию:

Вид:

$(".edit").editable('<%=Url.Action("UpdateEventData","Event") %>', { 
       submitdata: {eventid: <%=Model.EventId %>}, 
       tooltip: "Click to edit....", 
       indicator: "Saving...", 
       submit : "Save", 
       cancel : "Cancel" 
      }); 

Регулятор:

public string UpdateEventData(int eventid, string id, string value) 
    { 
     //load the event 
     var evt = Repository.GetEvent(eventid); 

     //UpdateModel; 
     System.Reflection.PropertyInfo pi = evt.GetType().GetProperty(id); 
     if (pi==null) 
      return ""; 
     try 
     { 

      object newvalue = Concrete.HelperMethods.ChangeType(value, pi.PropertyType); 

      pi.SetValue(evt, newvalue, null); 
      Repository.Save(); 

     } 
     catch (Exception ex) 
     { 
      //handle errors here 
     } 

     return pi.GetValue(evt, null).ToString(); 

    } 

Метод «HelperMethods.ChangeType» является более надежной версией Convert.ChangeType (так что он может обрабатывать nullables), что я получил от http://aspalliance.com/author.aspx?uId=1026.

Смежные вопросы