0

編集可能にする必要がある Kendo UI グリッドがあります。列の 1 つのクライアント テンプレートも必要です。

私を悩ませている剣道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

クライアント テンプレートを変更して、NextAvailableStates使用する前にの存在を確認できます。

 "# 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 に答える