0

我有一个需要可编辑的 Kendo UI 网格。我还需要其中一列的客户端模板。

剑道用户界面网格中让我烦恼的部分:

.Columns(columns =>
    {
        columns.Bound(p => p.Author).Filterable(false).Width(100);
        columns.Bound(p => p.Name).Filterable(false).Title("Idea Name");
        columns.Bound(p => p.Description).Filterable(false);
        columns.Bound(p => p.BeginDate).Format("{0:d}");
        columns.Bound(p => p.ReleaseDate).Format("{0:d}");
        columns.Bound(p => p.NextAvailableStates).ClientTemplate
                        (
                         "#for(var i = 0; i < NextAvailableStates.length; i++) {" +
                         "# <li>" +
                         "<a href=/Idea/NextState?state=#=NextAvailableStates[i].ID#" +                                                "> #=NextAvailableStates[i].StepName # </a>" +
                         "</li> #" +
                         "} #"
                         )
                 .Title("Actions").IncludeInMenu(false).Visible(true)
                 .Sortable(false).Filterable(false);

    })

我的控制器:

  public partial class IdeaController : Controller
    {

        private StateMachineHelper helper = new StateMachineHelper();

        public ActionResult Index(int? state)
        {   //must ad to Model the next available states
            var model = new List<Idea>();
            model.AddRange(helper.GetIdeasByState(helper.GetStateByID(state)));
            foreach (var item in model)
            {
               item.NextAvailableStates = helper.GetNextStates(helper.GetStateMachineInstancesByOrderID(item.ID));
            }
            return View(model);
        }

        public ActionResult NextState()
        {
            return View();
        }

        public ActionResult Read([DataSourceRequest]DataSourceRequest request, DateTime start, DateTime end)
        {
            var ideas = helper.GetIdeasBetweenDates(start, end);
            DataSourceResult result = ideas.ToDataSourceResult(request);
            return Json(result);
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Create([DataSourceRequest] DataSourceRequest request, Idea product)
        {
            if (product != null && ModelState.IsValid)
            {

                var helper = new StateMachineHelper();
                var machine = new StateMachineInstance() { 
                    ParentID = 0,
                    //1 -> machineID
                    CurrentStateID = helper.GetFirstStateOfMachine(1).ID,
                    MachineID =1,
                    ParentStateID =0,
                    //OrderType: idea/command 
                    OrderType = "Idea"
                };
                helper.AddNewOrder(product, machine);
                product.NextAvailableStates = helper.GetNextStates(machine);

            }
            return Json(new[] { product }.ToDataSourceResult(request, ModelState));
        }
    }
public Idea()
    {
        this.StateMachineInstances = new HashSet<StateMachineInstance>();
    }
    [ScaffoldColumn(false)]
    [DataMember]
    public int ID { get; set; }
    [Required]
    [DataMember]
    public string Name { get; set; }
    [DataMember]
    public string Description { get; set; }
    [DataMember]
    [Required]
    public string Author { get; set; }
    [DataMember]
    public System.DateTime BeginDate { get; set; }
    [DataMember]
    public Nullable<System.DateTime> ReleaseDate { get; set; }
    [DataMember]


    public List<State> NextAvailableStates
    {
        get
        {
            return nextAvailableStates;
        }
        set
        {
            nextAvailableStates = value;
        }
    }

    private List<State> nextAvailableStates = new List<State>();

    public virtual ICollection<StateMachineInstance> StateMachineInstances { get; set; }


}

网格渲染得很好,每一列都填充了正确的信息。当我需要向网格中添加新项目时,就会出现问题。弹出窗口没有出现,我得到Uncaught ReferenceError: NextAvailableStates is not defined. 这实际上是有道理的,因为网格会在新项目返回之前尝试绘制。

我的问题:有没有办法在使用自定义客户端模板时实现新项目的插入?

4

1 回答 1

0

You can try modifying your client template to check for the existence of NextAvailableStates before using them:

 "# if (NextAvailableStates) {" +
 " for(var i = 0; i < NextAvailableStates.length; i++) {" +
    "# <li>" +
     "<a href=/Idea/NextState?state=#=NextAvailableStates[i].ID#" +                                                 "> #=NextAvailableStates[i].StepName # </a>" +
    "</li> #" +
 " } " + 
 "} #"
于 2012-09-04T06:05:02.993 回答