如何在ASP MVC 3中的同一视图中使用来自不同模型的参数

时间:2013-05-14 09:01:52

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

我正在使用C#和SQL Server 2005开发ASP .Net MVC 3应用程序。

我也在使用Entity Framework和Code First Method。

我有一个部分视图,它继承自模型视图' FlowModelView'因为我正在使用此模型中的列表。

我想使用其他模型的参数,Gamme'

当我尝试这个时,该语句总是用红色下划线。

这是部分视图:

<%@  Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MvcApplication2.Models.FlowViewModel.Gamme>" %>

<% using (Html.BeginForm()) { %>
    <%: Html.ValidationSummary(true) %>
    <fieldset class="parametrage">
        <legend>Gestion de Gamme</legend>

        <div><%:Html.Label("Poste :")%><%: Html.DropDownList("SelectedPoste", Model.PostesItems)%></div>


         <div><%:Html.Label("Nombre de Passage :")%><%: Html.EditorFor(Model.Gamme=>Model.Gamme.Nbr_Passage) %></div>

        </fieldset>
         <% } %> 

这是FlowViewModel:

public class FlowViewModel
    {

        [Key]
        public string IDv { get; set; }
        [NotMapped]
        public SelectList PostesItems { 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; }
    }

这就是Gamme模型:

namespace MvcApplication2.Models
{
    public class Gamme
    {
        [Key]
        [Column(Order = 0)]
        [ForeignKey("Profile_Ga")]
        public string ID_Gamme { get; set; }
        [Key]
        [Column(Order = 1)]
        [ForeignKey("Poste")]
        public string ID_Poste { get; set; }
        public int Position { get; set; }
        public int Nbr_Passage { get; set; }
        public string Last_Posts { get; set; }
        public string Next_Posts { get; set; }

        public virtual Poste Poste { get; set; }
        public virtual Profile_Ga Profile_Ga { get; set; }

    }
and this the controller but contains some errors :


  public class AnouarController : Controller
    {



        //
        // GET: /Anouar/

         public ActionResult Gestion()
         {
            var model = new FlowViewModel()
            { YourGammeModel = new Gamme(){

        public string ID_Gamme { get; set; }

        public string ID_Poste { get; set; }
        public int Position { get; set; }
        public int Nbr_Passage { get; set; }
        public string Last_Posts { get; set; }
        public string Next_Posts { get; set; }

        public virtual Poste Poste { get; set; }
        public virtual Profile_Ga Profile_Ga { get; set; }

            }};

             return PartialView();

         }




    }

4 个答案:

答案 0 :(得分:1)

请在视图页面中使用以下内容进行检查

<%@  Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MvcApplication2.Models.FlowViewModel.GaItems>" %>

或者如果您只需要Gamme型号,则必须使用以下

 <%@  Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MvcApplication2.Models.Gamme>" %>

答案 1 :(得分:1)

您需要将Gamme成员添加到您在视图中传递的FlowViewModel,然后使用它。 只能将一个模型传递给视图(如果需要,可以使用ViewBag传递其他数据)。 那么,或者你扩展了FlowViewModel,或者你使用Gamme类广告模型到你的视图

@using MvcApplication2.Models.Gamme

public class FlowViewModel
{

    [Key]
    public string IDv { get; set; }
    [NotMapped]
    public SelectList PostesItems { get; set; } 
    public List<Profile_Ga> Profile_GaItems { get; set; }
    public List<Gamme> GaItems { get; set; }
    //here is the gamme member
    public Gamme YourGammeModel {get;set;}

    public int SelectedProfile_Ga { get; set; }

    public int SelectedGamme{ get; set; }

    public int SelectedPoste { get; set; }
}

初始化模型

var model = new FlowViewModel(){ YourGammeModel = new Gamme(){...}};

并使用flowviewmodel中的gamme属性:

<% Model.YourGammeModel.Nbr_Passage %>

答案 2 :(得分:1)

你的问题在这一行:

<div><%:Html.Label("Nombre de Passage :")%><%: Html.EditorFor(Model.Gamme=>Model.Gamme.Nbr_Passage) %></div>

你写了lambda表达式Model.Gamme=>Model.Gamme.Nbr_Passage但是应该写g=>g.Nbr_Passage,其中g的类型为Gamme

并将视图类型更改为:

<%@ Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MvcApplication2.Models.Ga‌​mme>" %>

答案 3 :(得分:1)

根据您昨天发给我的代码,您将Gestion渲染为另一个视图中的部分代码,因此该控制器操作实际上并未实现。您需要更改Index.aspx所在的位置

Html.RenderPartial("Gestion")

Html.RenderAction("Gestion", "Anouar", Model)

并将控制器操作更改为:

public ActionResult Gestion(FlowViewModel model)
{
    model.YourGammeModel = new Gamme();

    return PartialView(model);
 }