1

StackOverflowにアクセスしてからしばらく経ちました...

そこで、エンティティ フレームワークへのモデル ファーストのアプローチを使用して、Razor で ASP.NET MVC4 の使用を開始しました。これまでのところ、私はそれが好きですが、特定のものを覚えるのに問題がありました.

たとえば、ユーザー名 + パスワード + ユーザータイプを含む単純なログイン フォームを実装しようとしています。ただし、MVC3 での経験から思い出すと、Tuple を使用しない限り、2 つのモデルを渡すことはできません。

したがって、私の目的は @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")
}

私のEntity Frameworkモデルには、UserType(int Type_Id、String Description)とUser(int Id、String User_Name、String User_Pass、UserTypeType_Id)が含まれており、UserTypeType_IdはUserTypeテーブルを参照する外部キーです。

UserType テーブルからリストまたは IEnumerable を生成する方法はありますか? 私が投稿したコードは正しく動作しないと確信しているからです。

4

2 に答える 2

1

ビューで Entity Framework エンティティを使用するべきではありません。たとえば、ビューモデルを作成します。

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 }));
于 2013-09-06T01:55:10.207 に答える