在ASP MVC中传递NULL的值

时间:2013-05-13 14:02:26

标签: c# sql-server asp.net-mvc-3 visual-studio-2010

我正在使用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: error

3 个答案:

答案 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了......