3

我知道使用 jEditable ( http://www.appelsiini.net/projects/jeditable ),您可以进行就地编辑并将更改的信息发布到 URL。

我的 ASP.NET MVC 视图显示了一堆模型信息,我希望这些信息可以就地编辑。目前,我有两个视图 - 一个文本表示和一个编辑视图,其中一个表单完全发布,然后我的控制器操作将整个对象(从表单元素名称组装)作为参数,更新对象并返回到文本- 仅视图。

但是,当我切换到 jEditable 时,我只会使用文本视图并一次发布一个项目,而不是整个对象。我如何构建一个可以接受 jEditable 正在发布的内容的单个控制器操作,然后将其放入对象的适当属性中?

4

2 回答 2

7

这里有一些很好的示例代码

$("#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-行动/

于 2009-08-08T21:18:15.457 回答
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”是我从http://aspalliance.com/author.aspx?uId=1026获得的 Convert.ChangeType 的更强大版本(因此它可以处理可空值) 。

于 2010-03-08T21:43:33.433 回答