Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在多模型视图上使用DropdownListFor_C#_Entity Framework_Asp.net Mvc 4_Razor 2 - Fatal编程技术网

C# 如何在多模型视图上使用DropdownListFor

C# 如何在多模型视图上使用DropdownListFor,c#,entity-framework,asp.net-mvc-4,razor-2,C#,Entity Framework,Asp.net Mvc 4,Razor 2,我已经有一段时间没去看StackOverflow了 所以,我开始使用ASP.NETMVC4和Razor,使用模型优先的方法来创建实体框架。到目前为止,我很喜欢它,尽管我记不起某些东西 例如,现在我尝试实现一个简单的登录表单,它包括用户名+密码+用户类型。然而,正如我从MVC3的经历中回忆的那样,您不能传递两个模型。。。除非你使用元组 因此,我的目标是通过@HTML helpers创建表单,但我唯一无法使用的是DropdownListFor,它将显示用户类型列表并在表单中应用它们 @model T

我已经有一段时间没去看StackOverflow了

所以,我开始使用ASP.NETMVC4和Razor,使用模型优先的方法来创建实体框架。到目前为止,我很喜欢它,尽管我记不起某些东西

例如,现在我尝试实现一个简单的登录表单,它包括用户名+密码+用户类型。然而,正如我从MVC3的经历中回忆的那样,您不能传递两个模型。。。除非你使用元组

因此,我的目标是通过@HTML helpers创建表单,但我唯一无法使用的是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")
}
@模型元组
@{
ViewBag.Title=“登录”;
}
使用本地帐户登录。
@使用(Html.BeginForm(new{ReturnUrl=ViewBag.ReturnUrl})){
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
登录表格
  • @Html.Label(“用户名”) @Html.TextBoxFor(m=>m.Item1.User\u Name) @Html.ValidationMessageFor(m=>m.Item1.User\u Name)
  • @Html.Label(“密码”) @Html.PasswordFor(m=>m.Item1.User\u Pass) @Html.ValidationMessageFor(m=>m.Item1.User\u Pass)
  • @Html.Label(“门户访问”) >>>>>@Html.DropDownListFor(model=>model.Item2.Type_Id,新的SelectList(model.Item2,“Type_Id”,“Description”);
  • } @节脚本{ @Scripts.Render(“~/bundles/jqueryval”) }
    我的实体框架模型包括UserType(int-Type\u-Id,String-Description)和User(int-Id,String-User\u-Name,String-User\u-Pass,UserTypeType\u-Id),UserTypeType\u-Id是指回UserType表的外键


    有没有办法从UserType表生成list或IEnumerable?因为我确信我发布的代码不能正常工作。

    在controller的操作方法中创建一个集合,并将其分配给某个Viewbag属性 例如 ViewBag.UserType=新建SelectList()

    此集合应为IEnumerable类型对象

    现在从视图中使用此ViewBag项目

    e、 g。
    @Html.DropDownList(“UserType”,“Select User Type”)

    您真的不应该在视图中使用实体框架实体。创建视图模型,例如:

    public class LoginViewModel
    {
        public string Username{get;set;}
        public string Password{get;set;}
        public int UserTypeId{get;set;}
        public IEnumerable<UserTypes> UserTypes{get;set;}
    }
    

    问题不在于在视图上使用或实例化模型,而在于需要处理数据。无论如何谢谢你!视图:public ActionResult Index(){var context=new EMS_v1.emsmodelcainer();var query=from c in context.UserTypes选择c;var customers=query.ToList().AsEnumerable();ViewBag.UserTypes=customers;return View();}
    @Html.DropDownListFor(m => m.UserTypeId, Model.UserTypes.Select(t => new SelectListItem { Value = t.TypeId.ToString(), Text = t.Description }));