我正在使用C#和SQL Server 2005开发ASP .Net MVC 3应用程序。
我也在使用Entity Framework和Code First Method。
我想从DropDownList中的表(来自我的基础)上传数据。
该表是'Poste',它有一个'Poste'模型。
显示DropDownList的视图是'Gestion',其代码为:
<%@ Page Title="" Language="C#" Inherits="System.Web.Mvc.ViewPage<MvcApplication2.Models.FlowViewModel>" %>
<% using (Html.BeginForm()) { %>
<%: Html.ValidationSummary(true) %>
<fieldset class="parametrage">
<legend>Gestion de Gamme</legend>
<div><%:Html.Label("Poste :")%><%: Html.DropDownList("SelectedPoste", new SelectList(Model.PostesItems, "ID_Poste", "ID_Poste"))%></div>
<div><%:Html.Label("Nombre de Passage :")%></div>
<div><%:Html.Label("Position :")%></div>
<div><%:Html.Label("Poste Précédente :")%></div>
<div><%:Html.Label("Poste Suivante :")%></div>
</fieldset>
<% } %>
如您所见,它是从FlowViewModel导入的,代码为:
namespace MvcApplication2.Models
{
public class FlowViewModel
{
[Key]
public string IDv { get; set; }
public List<Poste> PostesItems { get; set; }
public List<Profile_Ga> Profile_GaItems { get; set; }
public List<Gamme> GaItems { get; set; }
public int SelectedProfile_Ga { get; set; }
public int SelectedGamme{ get; set; }
public int SelectedPoste { get; set; }
}
}
这是返回视图的控制器:
public class ProfileGaController : Controller
{
private GammeContext db = new GammeContext();
//
// GET: /ProfileGa/
[HttpGet]
public ActionResult Index(Profile_Ga profile_ga, Poste poste)
{
var viewModel = new FlowViewModel();
viewModel.PostesItems = db.Postes.ToList();
viewModel.Profile_GaItems = db.Profil_Gas.ToList();
viewModel.GaItems = db.Gammes.ToList();
return View(viewModel);
}
执行中出现异常的问题,提到值正在传递NULL:
答案 0 :(得分:3)
您可以为FlowViewModel
和intitialise PostesItems = new List<Poste>()
创建一个构造函数,这样如果没有任何项目,它将是一个空列表而不是null。
编辑,如果不清楚,请尝试将FlowViewModel
更改为此 -
public class FlowViewModel
{
public FlowViewModel()
{
PostesItems = new List<Poste>()
}
[Key]
public string IDv { get; set; }
public List<Poste> PostesItems { get; set; }
public List<Profile_Ga> Profile_GaItems { get; set; }
public List<Gamme> GaItems { get; set; }
public int SelectedProfile_Ga { get; set; }
public int SelectedGamme{ get; set; }
public int SelectedPoste { get; set; }
}
再次编辑:在聊天中解决了这个问题。 Index操作调用了一个工作正常的Index视图,但 视图试图使用Javascript加载不同的视图,而不是传入模型,所以它的模型在屏幕截图中为空。
答案 1 :(得分:1)
您的代码非常适合我。如果你改变
会发生什么viewModel.PostesItems = db.Postes.ToList();
到
viewModel.PostesItems = db.Postes.ToList() ?? new List<Poste>();
并且(可能对其他两个属性也一样)?
(我很惊讶你必须这样做。我认为ToList
返回一个空列表而不是null。)
答案 2 :(得分:1)
这里你真正需要的是一个有支持领域的财产。
public class FlowViewModel
{
private List<Poste> _postesItems = null;
public List<Poste> PostesItems
{
get
{
return _postesItems ?? new List<Poste>();
}
set
{
_postesItems = value ?? new List<Poste>();
}
}
}
这解决了所有问题,你不再需要viewModel了......