2016-03-20 4 views
0

私はDevexpress MVC拡張機能を使用しており、できるだけ簡略化して別の問題を見つけようとしています。公式サイトによると動作するはずですが、セレクションの値はコントローラに渡されません。単純な登録フォームが選択された値を投稿していません

これは、モデルとコントローラである:

public class Fruit 
    { 
     public int value { get; set; } 
     public string name { get; set; } 
    } 

public ActionResult Index() 
     { 
     var model = new object[1]; 
     var fruits = new List(); 

     fruits.Add(new Fruit() { value = 1, name = "Apple" }); 
     fruits.Add(new Fruit() { value = 2, name = "Orange"}); 
     fruits.Add(new Fruit() { value = 3, name = "Lemon"}); 
     fruits.Add(new Fruit() { value = 4, name = "Pear" }); 
     fruits.Add(new Fruit() { value = 5, name = "Cherry" }); 

     model[0] = fruits; 
     return View(model); 
     } 

とビュー:

@using (Html.BeginForm("Create", "Home")) 
{ 
    @Html.DevExpress().FormLayout(settings => 
{ 
    settings.Name = "Myformlayout"; 
    settings.Width = 600; 
    var gi = settings.Items.AddGroupItem(gs => 
    { 
     gs.Caption = "TEST"; 
    }); 
    gi.Items.Add(item => 
    { 
     item.Name = "fruits"; 
     item.Caption = "Fruits"; 
     item.NestedExtensionType = FormLayoutNestedExtensionItemType.ComboBox; 
     ComboBoxSettings cbset = (ComboBoxSettings)item.NestedExtensionSettings; 
     cbset.Properties.TextField = "name"; 
     cbset.Properties.ValueField = "value"; 
     cbset.Properties.ValueType = typeof(int); 
     cbset.Properties.DropDownStyle = DropDownStyle.DropDownList; 
     cbset.Properties.DataSource = Model[0]; 
    }); 

    gi.Items.Add(item => 
    { 
     item.NestedExtensionType = FormLayoutNestedExtensionItemType.Button; 
     var btnset = (ButtonSettings)item.NestedExtensionSettings; 
     btnset.Name = "btnSubm"; 
     btnset.Text = "Send to ctrl"; 
     btnset.UseSubmitBehavior = true; 
    }); 
}).GetHtml(); 

選択が正常に動作しているが、「CTRLへ送信」ボタンがクリックされたときに私が取得"パラメータ辞書には、パラメータ 'id'のヌルエントリが含まれています。コントローラHome \ Createにはint idパラメータが必要です。コントローラのパラメータ要件をintに変更すると、呼び出しが行われます。

目標:選択された果物のid(値)をコントローラに送り返します。

+0

私の見るところでは、IDのフィールドは表示されません。 Btw、Createアクションの実装方法 –

+0

私はCreateを実装していないので、選択したテキストの値を渡す方法を理解したいだけです。 DevExpressのデモによると、これはドロップダウンリストを定義する方法であるため、これはうまくいくはずです。 – Paxsentry

答えて

0

これは私に答えを与えた:https://documentation.devexpress.com/#AspNet/CustomDocument9151

ので、コントローラは次のようになります。

public ActionResult Create(MyModel item) 
     { 
     var x = EditorExtension.GetValue<int>("FruitId"); 

     return RedirectToAction("Index"); 
     } 

はあなたの助けをいただき、ありがとうございます。申し訳ありませんが、答えがわからないので、希望する解決策につながります。あなたのために頑張りましょう!

1

達成する必要はありますか?コンボボックスを使用してモデルのフィールドを編集するには?

モデル:

public class MyModel { 
    public int FruitId { get; set; } 
    public MyModel() { 

    } 
} 

コントローラー:

public ActionResult Index() 
{ 
    var fruits = new List<Fruit>(); 

    fruits.Add(new Fruit() { id = 0, name = "Apple" }); 
    fruits.Add(new Fruit() { id = 1, name = "Orange" }); 
    fruits.Add(new Fruit() { id = 2, name = "Lemon" }); 
    fruits.Add(new Fruit() { id = 3, name = "Pear" }); 
    fruits.Add(new Fruit() { id = 4, name = "Cherry" }); 

    ViewBag.FruitSource = fruits; 
    return View(new MyModel()); 
} 

public ActionResult Create(int fruitId) { 
    return View(fruitId); 
} 

public class Fruit { 
    public int id { get; set; } 
    public string name { get; set; } 
} 

ビュー:もしそうなら、私は次の方法で、この実装と思いますので、

@model DXWebApplication1.Models.MyModel 
@{ 
    ViewBag.Title = "Index"; 
} 

@using (Html.BeginForm("Create", "Home")) { 
    @Html.DevExpress().FormLayout(settings => { 
    settings.Name = "Myformlayout"; 
    settings.Width = 600; 
    var gi = settings.Items.AddGroupItem(gs => { 
     gs.Caption = "TEST"; 
    }); 
    gi.Items.Add(x => x.FruitId, item => { 
     item.Caption = "Fruits"; 
     item.NestedExtensionType = FormLayoutNestedExtensionItemType.ComboBox; 
     ComboBoxSettings cbset = (ComboBoxSettings)item.NestedExtensionSettings; 
     cbset.Properties.TextField = "name"; 
     cbset.Properties.ValueField = "id"; 
     cbset.Properties.ValueType = typeof(int); 
     cbset.Properties.DropDownStyle = DropDownStyle.DropDownList; 
     cbset.Properties.DataSource = ViewBag.FruitSource; 
    }); 

    gi.Items.Add(item => { 
     item.NestedExtensionType = FormLayoutNestedExtensionItemType.Button; 
     var btnset = (ButtonSettings)item.NestedExtensionSettings; 
     btnset.Name = "btnSubm"; 
     btnset.Text = "Send to ctrl"; 
     btnset.UseSubmitBehavior = true; 
    }); 
}).GetHtml(); 
} 

を、私はレイアウトをバインドラムダを使用してモデルプロパティにアイテムを追加します。そのフィールド名(FruitId)はCreateアクションパラメータの名前になります。

+0

Murosのリンクによると、コントローラがMyModel型のオブジェクトを期待している場合、Goshaさん、ありがとうございます.FruitIdが0、nullでないことがわかります。なんらかの理由で、送信ボタンとバインディングがないようです。 – Paxsentry

+0

元の質問で目標が更新されました。 – Paxsentry

+0

あなたの目標が選択されたフルーツIDを取得することであれば、私のソリューションはうまくいくはずですか?詳細な説明は –

関連する問題