2013-06-06 8 views
0

На мой взгляд, есть это:Ext.Net MVC обновить Panelgrid от контроллера

@{ 
var properties = db.StylesPropertyDefs.OrderBy(o => o.PropertyId); 
} 

.. 
.. 
@(Html.X().GridPanel() 
     .Title("Array Grid") 
     .ID("propertyGrid") 
     .Width(600) 
     .Height(350) 
     .Store(Html.X().Store() 
       .Model(Html.X().Model() 
          .Fields(
           new ModelField("PropertyId", ModelFieldType.Int), 
           new ModelField("PropertyName", ModelFieldType.String), 
           new ModelField("PropertyShortName", ModelFieldType.String), 
           new ModelField("PropertyActiveFlag", ModelFieldType.Boolean) 
          ) 
       ).DataSource(properties) 
.. 
.. 

И у меня есть в контроллере, чтобы добавить новое свойство. Новое свойство добавляется успешно, но я могу обновить PanelGrid (без обновления всей страницы). Вот контроллер:

[DirectMethod] 
    public ActionResult AddNewProperty(string propertyName, string propertyCode, bool propertyActive) 
       { 
        if (propertyName == "" || propertyCode=="") 
        { 
         X.Msg.Show(new MessageBoxConfig 
         { 
          Title = "Error", 
          Message = "The field name or code can not be empty.", 
          Buttons = MessageBox.Button.OK, 
          Icon = MessageBox.Icon.ERROR 
         }); 
         return this.Direct(); 
        } 

    //if all is ok add new property 
        var newOne = new StylesPropertyDef 
         { 
          PropertyActiveFlag = propertyActive, 
          PropertyName = propertyName, 
          PropertyShortName = propertyCode 
         }; 
        var db = new TaosKnowledgeDataContext(DataUtils.GetConStringLocal()); 
        db.StylesPropertyDefs.InsertOnSubmit(newOne); 
        db.SubmitChanges(); 

    //reload properties 
        var properties = db.StylesPropertyDefs.OrderBy(o => o.PropertyId); 

        var theGrid = X.GetCmp<GridPanel>("propertyGrid"); 
//now i need refresh or reload the panel grid. 


        X.GetCmp<Window>("AddNewProperty").Close(); 
        return this.Direct(); 
        //return RedirectToAction("StyleProperties"); 
       } 

Таким образом, возобновление, мне нужно обновить PanelGrid источник данных (или магазин) от контроллера. Хотел бы ты помочь мне?

ответ

0

Ok. Я решаю. Я удалил источник данных в хранилище, и я поместил прокси-считыватель в контроллер.

.Proxy(
     Html.X().AjaxProxy() 
     .Url(Url.Action("Read")) 
     .Reader(Html.X().JsonReader().Root("data")) 
    ) 

В контроллере:

public ActionResult Read() 
     { 
      var db = new TaosKnowledgeDataContext(DataUtils.GetConStringLocal()); 
      var properties = db.StylesPropertyDefs.OrderBy(o => o.PropertyId); 
      return this.Store(properties); 
     } 

И когда вставка новой недвижимости:

var store = X.GetCmp<Store>("Store1"); 
store.Reload(); 

Спасибо в любом случае.

0

Пожалуйста, попробуйте следующее.

  1. Настройте идентификатор магазина.

    .ID("Store1") 
    
  2. Выполните следующие действия в контроллере.

    Store store = X.GetCmp<Store>("Store1"); 
    store.DataSource = db.StylesPropertyDefs.OrderBy(o => o.PropertyId); 
    store.DataBind(); 
    
+0

магазин = X.GetCmp ("Store1"); дайте мне нулевой источник данных, это нормально? и store.DataBind() выдает ошибку: Ошибка сервера в '/' приложении. Индекс и длина должны относиться к местоположению внутри строки. Имя параметра: длина –

+0

Да, извините, для вызова DataBind в магазине требуется модель магазина, которую следует воссоздать вручную в таком сценарии. Хотя, ваше решение с AjaxProxy лучше. Просто я не был уверен, что это уместно. –