2017-03-06 5 views
1

私はdevextremeでDataGridを使用しています。 どのように私はasp.net mvcのコントローラにdatagridを送ることができますか? 私は私の見解では、これを試してみました:データグリッドdevextremeをコントローラにasp.net mvc投稿する方法

@using (Html.BeginForm("action-name", "controller-name", FormMethod.Post)) 
      { 
       <div id="frm"></div> 
       <div id="grid"></div> 
       <div class="submit-button" id="submitBtn"></div> 
      } 

をして、これは私のモデルである:私のcontollerで

public class class-name 
    { 
     public int id { get; set; } 
     public string Name { get; set; } 
     public string FName { get; set; } 
     public ContactInfo ContactInfo { get; set; } 
    } 

public class ContactInfo 
    { 
     public string type { get; set; } 
     public string value { get; set; } 
    } 

私は自分のフォームデータ(クラス名)が、グリッドデータ(のContactInfo)を取得することですnull

+0

グリッドで編集しますか?データグリッドオプションを提供できますか?もう一つ重要なことは、DevExtremeのバージョンは何ですか? – Sergey

+0

私は16.2バージョンを使用しています。はい、私は行を追加、更新、削除しています。ボタンをクリックすると、データグリッド内のすべてのデータをコントローラに送信することができます。たとえば、送信ボタンをクリックすると、フォームデータがコントローラに送信されます。 – leman17

答えて

2

あなたの場合、ASP.NET MVC Wrappers for DevExtremeを使用できます。

@(Html.DevExtreme().DataGrid() 
    .DataSource(ds => ds 
     .WebApi() 
     .Controller("GridData") 
     .Key("OrderID") 
     .LoadAction("GetAllOrders") 
     .InsertAction("InsertOrder") 
     .UpdateAction("UpdateOrder") 
     .DeleteAction("RemoveOrder") 
    ) 
) 

とコントローラ:

public class DataGridWebApiController : ApiController { 

    [HttpGet] 
    public HttpResponseMessage GetAllOrders(DataSourceLoadOptions loadOptions) { 
     //... 
    } 

    [HttpPost] 
    public HttpResponseMessage InsertOrder(FormDataCollection form) { 
     //... 
    } 

    [HttpPut] 
    public HttpResponseMessage UpdateOrder(FormDataCollection form) { 
     //... 
    } 

    [HttpDelete] 
    public void RemoveOrder(FormDataCollection form) { 
     //... 
    } 
} 

まあ、サーバにすべてのデータグリッドのデータを送信する必要はありませんその場合、あなたは次のようにWEBAPIコントローラにグリッドをバインドすることができます側。更新されたデータだけを管理してください。

データバインディングに関する追加情報がthis articleにあります。

this demoもご覧ください。

+0

thats great!私はどのようにデータを送信することができます(私のフォームとグリッドデータ)私のコントローラに私が送信メニューをクリックします。私はonclickメソッドのボタンを試して、それにajaxを使用するが、私は成功しませんでした。 – leman17

+1

なぜすべてのデータグリッドをサーバー側に投稿したいのですか?それは少し奇妙に聞こえる。組み込みのdxDataGrid機能を使用してデータ変更を処理できます。私はCRUD操作のためのコントローラを実装し、DataGridの編集を有効にすることを意味します。上記のサンプルと同様です。 – Sergey

+0

leman17は、変更されたグリッドデータをフォーム上の他のデータとともに1つのフォームに保存します。POST submit。私はこの仕事をどのように達成するのだろうか。 – Sven

-1

私の質問には私の方法がありました。ここでは が解決策です。 https://www.devexpress.com/Support/Center/Question/Details/T489645 デベロッパーサポートのおかげで

+0

"このチケットを見ることはできません。これがチケットの場合はログインしてください。"このようにページにアクセスできない場合は、答えのテキストを引用して属性を付ける方がよいでしょう。 –

2

すべての列に対してcellTemplateを使用できます。hidden inputを使用する必要があります。たとえば、次のコードを仮定します。

factory.Add().DataField("Mobile") 
      .CellTemplate(@<text> 
       <%= text %> 
       <input type='hidden' name='Addresses[<%= rowIndex %>].Mobile' value='<%= value %>' /> 
       </text>); 

text、rowIndex、valueはDevExtremeオブジェクトです。 詳細については、cellInfoセクションをご覧ください。 https://js.devexpress.com/Documentation/ApiReference/UI_Widgets/dxDataGrid/Configuration/columns/?search=columns

+0

サイトコンテンツが変更されたり使用できなくなった場合に備えて、リンクの前後にコンテキストを追加して関連する部分をコピーして貼り付けてください。 – LW001

+0

これは唯一有効なソリューションですか? – Sven

+0

グリッドにページが1つある場合、またはサーバー操作がfalseの場合は、代わりにgetDataSource()を使用できます。たとえば、次のようになります。var allGridData = $( "#yourGridId")。dxDataGrid( 'instance')。getDataSource(); –

関連する問題