我访问StackOverflow已经有一段时间......
所以,我开始在Razor中使用ASP.NET MVC4,使用模型优先的Entity Framework方法。到目前为止,我很喜欢它,但是我记得某些东西时遇到了问题。
例如,现在我正在尝试实现一个简单的登录表单,其中包括用户名+密码+用户类型。但是,正如我从MVC3的经验中回忆的那样,你不能传递两个模型......除非你使用元组。
所以,我的目标是通过@HTML帮助器创建表单,但是我唯一无法使用的是DropdownListFor,它会带来用户类型列表并在表单中应用它们。
@model Tuple<EMS_v1.User, EMS_v1.UserType>
@{
ViewBag.Title = "Log in";
}
<section id="loginForm">
<h2>Use a local account to log in.</h2>
@using (Html.BeginForm(new { ReturnUrl = ViewBag.ReturnUrl })) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>Log in Form</legend>
<ol>
<li>
@Html.Label(" User Name")
@Html.TextBoxFor(m => m.Item1.User_Name)
@Html.ValidationMessageFor(m => m.Item1.User_Name)
</li>
<li>
@Html.Label("Password")
@Html.PasswordFor(m => m.Item1.User_Pass)
@Html.ValidationMessageFor(m => m.Item1.User_Pass)
</li>
<li>
@Html.Label("Portal Access")
>>>>> @Html.DropDownListFor(model => model.Item2.Type_Id, new SelectList(Model.Item2, "Type_Id", "Description"));
</li>
</ol>
<input type="submit" value="Log in" />
</fieldset>
}
</section>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
我的实体框架模型包括UserType(int Type_Id,String Description)和User(int Id,String User_Name,String User_Pass,UserTypeType_Id),UserTypeType_Id是引用回UserType表的外键。
有没有办法从UserType表生成列表或IEnumerable?因为我确定我发布的代码无效。
答案 0 :(得分:1)
在控制器的action方法中创建一个集合,并将其分配给某个Viewbag属性 例如 ViewBag.UserType = new SelectList();
此集合应该是IEnumerable类型对象。
现在从视图中使用此ViewBag prorety。
e.g。 @ Html.DropDownList(“UserType”,“选择用户类型”)
答案 1 :(得分:1)
您确实不应该在视图中使用Entity Framework实体。创建一个viewmodel例如:
public class LoginViewModel
{
public string Username{get;set;}
public string Password{get;set;}
public int UserTypeId{get;set;}
public IEnumerable<UserTypes> UserTypes{get;set;}
}
然后在你的下拉列表中:
@Html.DropDownListFor(m => m.UserTypeId, Model.UserTypes.Select(t => new SelectListItem { Value = t.TypeId.ToString(), Text = t.Description }));