Salaamun Alekum
我从MVC中的ListBox获取null
值的行动
HR_TP_Supplier null Assignment1MedicineMasterPharmacy.Models.HR_TP_Supplier
这是CSHTML代码
<div class="form-group">
@Html.LabelFor(model => model.HR_TP_Supplier, "Supplier", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.ListBox("HR_TP_Supplier", null, htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.HR_TP_Supplier, "", new { @class = "text-danger" })
</div>
</div>
这是C#动作代码
public ActionResult Create([Bind(Include = "MedicineID,Med_Name,Med_code,Generic_Name,Trade_Price,Retail_Price,Accounting_Unit,Nature,THERAPEUTIC_Group,Dosage,Description,Active,Enteredby,Enteredon,ClientID,HR_TP_Supplier")] PH_tmedicine_masterSubmit pH_tmedicine_master)
{
这是实体类
namespace Assignment1MedicineMasterPharmacy.Models
{
using System;
using System.Collections.Generic;
public partial class PH_tmedicine_masterSubmit
{
public int MedicineID { get; set; }
public string Med_Name { get; set; }
public string Med_code { get; set; }
public Nullable<int> Generic_Name { get; set; }
public Nullable<int> Trade_Price { get; set; }
public Nullable<int> Retail_Price { get; set; }
public Nullable<int> Accounting_Unit { get; set; }
public Nullable<int> Nature { get; set; }
public Nullable<int> THERAPEUTIC_Group { get; set; }
public string Dosage { get; set; }
public string Description { get; set; }
public string Active { get; set; }
public string Enteredby { get; set; }
public Nullable<System.DateTime> Enteredon { get; set; }
public Nullable<int> ClientID { get; set; }
public virtual HR_TP_Supplier HR_TP_Supplier { get; set; }
}
}
我应该如何解决它我希望ListBox中的多个选定值在列表或数组或字符串之类的任何内容
谢谢
答案 0 :(得分:3)
在您的视图中使用ORM创建的实体并不是一个好主意,尤其是当您的视图多于一个或两个字段时。 您应该为视图创建视图模型。
HR_TP_Supplier
实体上的PH_tmedicine_masterSubmit
属性不是集合类型。不确定为什么你想要多选列表框。无论如何,如果你真的想要视图中的多选列表框,你可以添加一个字符串数组的属性来存储多选列表框中的选定项目。
public class MedicineMasterVm
{
public string[] SelectedSuppliers { get; set; }
public IEnumerable<SelectListItem> Suppliers { get; set; }
//Add Other needed properties here
public string Med_Name { get; set; }
public string Med_code { get; set; }
}
在你的GET操作中,你应该创建一个这样的对象,加载Suppliers
属性并将其发送到视图。
public ActionResult Create()
{
var vm = new MedicineMasterVm();
//The below code is hardcoded for demo. you mat replace with DB data.
vm.Suppliers= new[]
{
new SelectListItem { Value = "1", Text = "Supplier 1" },
new SelectListItem { Value = "2", Text = "Supplier 2" },
new SelectListItem { Value = "3", Text = "Supplier 3" }
};
return View(vm);
}
现在在您的视图中,强类型为MedicineMasterVm
类,
@model UserViewModel
<h2>Create Medicine </h2>
@using (Html.BeginForm())
{
<label>Name</label> @Html.TextBoxFor(s=>s.Med_Name)
<label>Code</label> @Html.TextBoxFor(s=>s.Med_Code)
<label>Suppliers</label> @Html.ListBoxFor(s => s.SelectedSuppliers ,Model.Suppliers)
<input type="submit" value="Save" />
}
现在,当用户发布此表单时,您将获得视图模型的SelectedSuppliers
属性中的Selected Items值。读取已发布视图模型的属性值,并使用它来构建实体对象并保存。
[HttpPost]
public ActionResult CreateUser(MedicineMasterVm model)
{
if (ModelState.IsValid)
{
string[] supplierArray= model.SelectedSuppliers ;
//check items now
//do your further things and follow PRG pattern as needed
}
//reload the Suppliers property again in the ViewModel before returning to the View
return View(model);
}
如果您想要单个选择正常下拉列表,请将字符串数组更改为字符串或整数,并按照this post中的说明使用它。