简单的注册表单不发布选定的值

时间:2016-03-20 14:40:30

标签: asp.net-mvc devexpress

我正在使用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(值)发回控制器。

2 个答案:

答案 0 :(得分:1)

你需要做什么?要使用组合框编辑模型的字段?如果是这样,我将通过以下方式实现:

型号:

public class MaterielImplBO implements MaterielBO {
    private ImplMateriel materielDAO; 

    public ImplMateriel getMaterielDAO() {
        return materielDAO;
    }

    public void setMaterielDAO(ImplMateriel materielDAO) {
        this.materielDAO = materielDAO;
    }
    @Override
    public void insert(BeanMateriel obj) {
    Materiel materiel = new Materiel(); 
    materiel.setCodem(obj.getCodem());
    materiel.setDatemiseenservice(obj.getDatemiseenservice());
    materiel.setDepartement(obj.getDepartement());
    materiel.setLibelle(obj.getLibelle());
    materiel.setMarque(obj.getMarque());
    materielDAO.insert(materiel);
    }

    @Override
    public void delete(BeanMateriel obj) {
    Materiel materiel = new Materiel(); 
    materiel.setCodem(obj.getCodem());
     materielDAO.delete(materiel);
    }


    @Override
    public void update(BeanMateriel obj) {
    Materiel materiel = new Materiel(); 
    materiel.setCodem(obj.getCodem());
    materiel.setDatemiseenservice(obj.getDatemiseenservice());
    materiel.setDepartement(obj.getDepartement());
    materiel.setLibelle(obj.getLibelle());
    materiel.setMarque(obj.getMarque());
    materielDAO.update(materiel);
}

    @Override
    public List<BeanMateriel> getAll() {
    List<BeanMateriel> liste = new ArrayList<BeanMateriel>();
    for (Materiel obj: materielDAO.getAll())
    {
        BeanMateriel bean = new BeanMateriel(); 
        bean.setCodem(obj.getCodem());
        bean.setDatemiseenservice(obj.getDatemiseenservice());
        bean.setDepartement(obj.getDepartement());
        bean.setLibelle(obj.getLibelle());
        bean.setMarque(obj.getMarque());
        liste.add(bean);
    }

    return liste;
    }

}

控制器:

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; }
}

因此,我使用Lambda将布局项绑定到我的模型属性。该字段名称(FruitId)将是Create action参数的名称。

答案 1 :(得分:0)

这给了我答案:https://documentation.devexpress.com/#AspNet/CustomDocument9151

所以控制器看起来像这样:

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

         return RedirectToAction("Index");
      }

感谢您的帮助。对不起我不知道是谁的回答引导我找到理想的解决方案。为你们两个重击!