简单的注册表单不发布选定的值
Simple registration form not posting selected value
我正在使用 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();
选择工作正常,但是当单击 "Send to ctrl" 按钮时,我得到一个 "The parameter dictionary contains a null entry for parameter 'id'. The controller "Home\Create" 需要一个 int id 参数。如果我更改参数要求controller to int?, 调用完成,所以提交有效。
目标:将所选水果的id(值)发送回控制器。
你需要达到什么目的?要使用组合框编辑模型的字段?如果是这样,我将通过以下方式实现:
型号:
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();
}
因此,我使用 Lambda 将布局项绑定到我的模型 属性。该字段名称 (FruitId) 将是创建操作参数的名称。
这给了我答案:https://documentation.devexpress.com/#AspNet/CustomDocument9151
所以控制器看起来像这样:
public ActionResult Create(MyModel item)
{
var x = EditorExtension.GetValue<int>("FruitId");
return RedirectToAction("Index");
}
感谢您的帮助。抱歉,我不知道是谁的回答让我找到了所需的解决方案。为你们俩点赞!
我正在使用 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();
选择工作正常,但是当单击 "Send to ctrl" 按钮时,我得到一个 "The parameter dictionary contains a null entry for parameter 'id'. The controller "Home\Create" 需要一个 int id 参数。如果我更改参数要求controller to int?, 调用完成,所以提交有效。
目标:将所选水果的id(值)发送回控制器。
你需要达到什么目的?要使用组合框编辑模型的字段?如果是这样,我将通过以下方式实现:
型号:
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();
}
因此,我使用 Lambda 将布局项绑定到我的模型 属性。该字段名称 (FruitId) 将是创建操作参数的名称。
这给了我答案:https://documentation.devexpress.com/#AspNet/CustomDocument9151
所以控制器看起来像这样:
public ActionResult Create(MyModel item)
{
var x = EditorExtension.GetValue<int>("FruitId");
return RedirectToAction("Index");
}
感谢您的帮助。抱歉,我不知道是谁的回答让我找到了所需的解决方案。为你们俩点赞!