我正在使用C#和SQL Server 2005开发ASP.Net MVC 3应用程序。我正在使用实体框架和代码优先方法。
我有一个模型Profile_Ga及其视图(索引,创建,...)。
我在此模型的索引中创建了一个DropDownList来加载ID(ID_Gamme)。
我现在想在Profil_Ga的索引中加载另一个表(Poste的另一个模型)的ID。
但是总会出现这个错误:
DataBinding:'MvcApplication2.Models.Profile_Ga'不包含 名为“ID_Poste”的属性。
这是Profile_Ga的控制器:
namespace MvcApplication2.Controllers
{
public class ProfileGaController : Controller
{
private GammeContext db = new GammeContext();
//
// GET: /ProfileGa/
public ViewResult Index(Profile_Ga profile_ga, Poste poste)
{
ViewBag.ID_Gamme = new SelectList(db.Profil_Gas, "ID_Gamme", profile_ga.ID_Gamme);
ViewBag.ID_Poste = new SelectList(db.Postes, "ID_Poste", poste.ID_Poste);
return View(db.Profil_Gas.ToList());
}
这就是我在索引中添加的内容:
<%:Html.Label("Gamme :")%>
<%: Html.DropDownList("ID_Gamme", new SelectList(Model, "ID_Gamme", "ID_Gamme ")) %>
<%:Html.Label("Poste :")%>
<%: Html.DropDownList("ID_Poste", new SelectList(Model, "ID_Poste", "ID_Poste ")) %>
答案 0 :(得分:2)
错误发生了。模型不包含ID_Poste
。
您正在将db.Postes
存储到ViewBag中,但传递给视图的模型只是db.Profil_Gas
,如此部分所示:return View(db.Profil_Gas.ToList());
- 这不会包含db.Postes
如果您想展示两个单独的内容,最好的方法是创建一个包含这样的内容的新 ViewModel 类。
查看模型
public class MyViewModel
{
// The two drop-down lists
public List<Profile_Ga> Profile_Gas { get; set; }
public List<Poste> Postes { get; set; }
// Used to store selected items
public int SelectedProfile_Ga { get; set; }
public int SelectedPoste { get; set; }
}
然后在您的控制器中
[HttpGet]
public ActionResult Index(Profile_Ga profile_ga, Poste poste)
{
var viewModel = new MyViewModel();
viewModel.Profile_Gas = db.Profil_Gas.ToList();
viewModel.Postes = db.Postes.ToList();
return View(viewModel);
}
[HttpPost]
public ActionResult Index(MyViewModel viewModel)
{
string debug = string.Format("You selected Profile: {0} and Poste: {1}", viewModel.SelectedProfile_Ga, viewModel.SelectedPoste);
return View(viewModel);
}
最后在您的视图中
<%: Html.DropDownList("SelectedProfile_Ga", new SelectList(Model.Profile_Gas, "ID_Gamme", "NameToShow")) %>
<%: Html.DropDownList("SelectedPoste", new SelectList(Model.Postes, "ID_Poste", "NameToShow")) %>
然后,您只需将NameToShow
替换为您要在下拉框中显示的属性即可。然后,当您提交表单时, ViewModel 将与下拉框的值一起传回(如代码示例所示)。在HttpPost
项目的调试中放置断点以检查值是否正确然后你应该好好去!
答案 1 :(得分:1)
您的视图模型为Profile_Gas
,因此您无法执行
<%:Html.Label("Poste :")%>
<%: Html.DropDownList("ID_Poste", new SelectList(Model, "ID_Poste", "ID_Poste ")) %>
您需要创建一个封装Profile_Ga
和Poste
public class ViewModel
{
public List<Poste> Postes { get; set; }
public List<Profile_Ga> Profile_Gas { get; set; }
}
并从控制器返回此视图模型。
public ViewResult Index(Profile_Ga profile_ga, Poste poste)
{
return new ViewModel
{
Postes = db.Postes.ToList(),
Profile_Gas = db.Profil_Gas.ToList();
}
}
所以你的观点看起来像
<%:Html.Label("Gamme :")%>
<%: Html.DropDownList("ID_Gamme", new SelectList(Model.Profile_Gas, "ID_Gamme", "ID_Gamme ")) %>
<%:Html.Label("Poste :")%>
<%: Html.DropDownList("ID_Poste", new SelectList(Model.Postes, "ID_Poste", "ID_Poste ")) %>