2013-12-10 25 views
0

我正在开发一个MVC 2项目,我想使用jqGrid来编辑网格的单元格。 当我编辑一个单元格,然后按下回车键,我就会看到“No Url is Set” My View看起来像;MVC jqGrid - 无法获取单元格编辑工作“无法设置URL”

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> 
    JobTitles 
</asp:Content> 

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

    <fieldset> 
     <legend>Job Titles Maintenance</legend> 
      <table id="list" class="scroll" style="font-size: 11px;"></table> 
      <div id="pager" class="scroll" style="text-align:center;font-size: 11px;"></div> 
     </div> 
    </fieldset> 
    <%--jqGrid Code - refer http://www.trirand.com/blog/jqgrid/jqgrid.html --%> 
    <script type="text/javascript"> 
     $(document).ready(function() { reloadGrid(); }); 

     function reloadGrid() { 
      var $grid = $("#list"); 
      $grid.jqGrid({ 
       url: '<%: Url.Action("GetCurrentJobTitles", "Maintenance")%>', 
       datatype: 'json', 
       mtype: 'POST', 
       colNames: ['JobTitleId', 'Title', 'Head Office Based', 'Usage'], 
       colModel: [ 
       { name: 'JobTitleId', index: 'JobTitleId', key: true, editable: true, editrules: { readonly: true } }, 
     { name: 'Title', index: 'Title', width: 280, align: 'left', sortable: true, editable: true}, 
     { name: 'HeadOfficeFlag', index: 'HeadOfficeFlag', width: 100, align: 'left', sortable: true, editable: true, edittype: 'checkbox' }, 
     { name: 'Usage', index: 'Usage', width: 40, align: 'left', sortable: true, editable: false }], 
       cellEdit: true, 
       cellSubmit: 'remote', 
       cellUrl: '<%: Url.Action("UpdateJobTitle", "Maintenance")%>', 
       pager: $('#pager'), 
       rowNum: 25, 
       rowList: [10, 25, 50, 100, 500], 
       sortname: 'Title', 
       sortorder: "asc", 
       viewrecords: true, 
       caption: 'Job Titles', 
       height: 575 
      }); 
     } 

    </script> 

</asp:Content> 

我的控制器看起来像;

public ActionResult UpdateJobTitle(CellEditingViewModel viewModel) 
{ 
    var jobTitle = JobTitle.GetById(viewModel.JobTitleId); 
    switch (viewModel.PropertyName) 
    { 
     case "Title": 
      jobTitle.Title = viewModel.PropertyValue.ToString(); 
      break; 

     case "HeadOfficeFlag": 
      jobTitle.HeadOfficeFlag = Convert.ToBoolean(viewModel.PropertyValue); 
      break; 
    } 

    try 
    { 
     jobTitle.Update(); 
    } 
    catch 
    { 
     return this.Json(false); 
    } 

    return this.Json(true); 
} 
+0

我的猜测是当你编辑并按下回车键时,从jqGrid发布的对象与你的控制器期望的视图模型不匹配,本站有一个很好的MVC内联编辑示例:http:// tpeczek .codeplex.com/SourceControl/latest#trunk/ASP.NET MVC示例/ jqGrid示例/ jqGrid /检出vi他们使用的新型号/活页夹。 –

回答

1

你应该选择的jqGrid使用正确的情况下:

cellsubmit: 'remote', 
cellurl: '<%: Url.Action("UpdateJobTitle", "Maintenance")%>', 

cellEdit: true。 jqGrid没有明确的名称转换为选项的名称。 :-(

我建议你还用pager: '#pager'代替pager: $('#pager'),加gridview: trueautoencode: true选项,所有列定义中删除index性质,从colModel删除不需要的align: 'left', sortable: true, editable: false性质(见colModel属性定义默认值的描述the documentation

+0

谢谢你,奥列格。你和Darin Dimitrov都是我最喜欢的人! – arame3333

+0

@ arame3333:不客气!感谢比较我与Darin Dimitrov。 :-) – Oleg