MVC 3 - 从回发列表框中获取所有选定的值
Posted
技术标签:
【中文标题】MVC 3 - 从回发列表框中获取所有选定的值【英文标题】:MVC 3 - Getting all selected values from a listbox on postback 【发布时间】:2011-11-11 14:41:29 【问题描述】:我有一个 MVC3 项目,它有一个这样的列表框 (listboxfor):
@html.ListBoxFor(m => m.cat_fam_codes, new SelectList(BaanWrapper.GetAllCategoryFamilies(), "Code", "Description"), new @size = "10" )
在测试时,我可以在列表中选择多个条目,甚至添加了一个事件处理程序,以在选择它们时弹出所选值的逗号限制列表。但是,当我将表单发布回控制器时,我只会返回第一个选定的值。例如,如果我选择值 1,2,3,4 - 我的 JQuery 事件处理程序将弹出“1,2,3,4”。没问题 - 但在回发时,控制器中引用的绑定对象仅显示“1”。
[HttpPost]
public ActionResult Create(EventReport eventReport)
return View(eventReport);
任何帮助将不胜感激。
编辑:
这是 EventReport 数据模型/类:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
namespace EWS.Models
[MetadataType(typeof(EventReportMetaData))]
public partial class EventReport
private static readonly EWSDataContext db = new EWSDataContext();
#region Nested type: MetaData
private sealed class EventReportMetaData
[DisplayName("Alert Email Body")]
[Required(ErrorMessage = "Required")]
public string alert_body get; set;
[DisplayName("Alert Email Subject")]
[Required(ErrorMessage = "Required")]
public string alert_subject get; set;
[DisplayName("Categories")]
public string cat_codes get; set;
[DisplayName("Category Families")]
public string cat_fam_codes get; set;
[DisplayName("CCR Codes")]
public string ccr_codes get; set;
[Required(ErrorMessage = "Required")]
public DateTime create_dtm get; set;
[Required(ErrorMessage = "Required")]
public int created_by get; set;
[DisplayName("Email List")]
[Required(ErrorMessage = "Required")]
[IsInteger(ErrorMessage = "Invalid Email List")]
[IsGreaterThanZero(ErrorMessage = "Required")]
public int email_list_id get; set;
[DisplayName("Begin Date")]
public DateTime begin_dtm get; set;
[DisplayName("End Date")]
public DateTime end_dtm get; set;
[DisplayName("Event Threshold")]
[Required(ErrorMessage = "Required")]
[IsInteger(ErrorMessage = "Invalid Threshold")]
public int event_count get; set;
[DisplayName("Disabled")]
public bool is_disabled get; set;
[DisplayName("Notify Over Threshold")]
[Required(ErrorMessage = "Required")]
public bool notify_over_events get; set;
[DisplayName("Notify Under Threshold")]
[Required(ErrorMessage = "Required")]
public bool notify_under_events get; set;
[Required(ErrorMessage = "Required")]
public int report_id get; set;
[DisplayName("Report Title")]
[Required(ErrorMessage = "Required")]
public string report_title get; set;
[DisplayName("Reset By")]
public int reset_by get; set;
[DisplayName("Reset Date")]
public DateTime reset_dtm get; set;
[DisplayName("SKUs")]
public string skus get; set;
[DisplayName("Source System")]
[Required(ErrorMessage = "Required")]
public string source_system get; set;
[DisplayName("Sub-Categories")]
public string sub_cat_codes get; set;
[DisplayName("# of Time Units")]
[Required(ErrorMessage = "Required")]
public int window_dt_part_count get; set;
[DisplayName("Unit of Time")]
[Required(ErrorMessage = "Required")]
public string window_dt_part get; set;
#endregion
谢谢!
【问题讨论】:
你的 eventReport 模型是什么样的? 【参考方案1】:尝试将属性类型更改为 string[] 或 int[]。我认为默认模型绑定器需要一个数组,因为在你的情况下它不是一个数组,它只是用第一个选定的值填充它。如果您必须坚持使用这个模型类,您可能需要调整绑定(例如,使用自定义模型绑定器)。
【讨论】:
【参考方案2】:好的,营员们,这就是我所做的……我将使用 cat_code 的一个下拉列表(来自我的数据库模型)作为示例。
像这样修改了我的模型类:
public IList<string> SelectedCategoryCodes
get
if (string.IsNullOrWhiteSpace(cat_codes))
return new List<string>();
return cat_codes.Split(',').ToList();
set cat_codes = string.Join(",", value.ToArray());
接下来我有
private sealed class EventReportMetaData
....
[DisplayName("Categories")]
public string cat_codes get; set;
....
由于我将多个选定的值作为逗号分隔的字符串存储在数据库中,因此我将其添加到 MVC 模型中,以便存储在该字段 (cat_codes) 中的数据可以在视图中读取和写入。
然后在我看来,我将 ListBoxFor 声明更改为如下所示:
@Html.ListBoxFor(m => m.SelectedCategoryCodes, new SelectList(BaanWrapper.GetAllCategories(), "Code", "Description"), new @size = "10")
就是这样。由于我的数据库模型已经有一个 cat_codes 字段,所以一切都到位了。
希望这对某人有所帮助。
【讨论】:
以上是关于MVC 3 - 从回发列表框中获取所有选定的值的主要内容,如果未能解决你的问题,请参考以下文章
我如何从 mvc 的剑道 ui 网格的下拉列表中获取选定的值
如何使用 jquery 从 asp.net 列表框中仅获取当前选定的选项