我正在使用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 :(得分: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");
}
感谢您的帮助。对不起我不知道是谁的回答引导我找到理想的解决方案。为你们两个重击!