0

ユーザーの情報を編集するフォームを使用して、ユーザーのすべての情報をビューに表示しようとしています。私はこのコントローラーアクションを持っています:

'
' GET: /Account/EditRegistry/5

Public Function EditRegistry(Optional id As String = Nothing) As ActionResult

    ' get user model
    Dim model = Membership.GetUser(id)

    ' pass username to view
    ViewData("UserName") = id

    Return View(model)

End Function

そして、私はこのビューを使用しています:

@ModelType MyBlog.RegisterModel

@Code
    ViewData("Title") = "Register"
End Code

<h2>Create a New Account</h2>
<p>
    Use the form below to create a new account. 
</p>
<p>
    Passwords are required to be a minimum of @Membership.MinRequiredPasswordLength characters in length.
</p>

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@Using Html.BeginForm()
    @Html.ValidationSummary(True, "Account creation was unsuccessful. Please correct the errors and try again.")
    @<div>
        <fieldset>
            <legend>Account Information</legend>

            @Html.Hidden("m.UserName", ViewData("UserName"))

            <div class="editor-label">
                @Html.LabelFor(Function(m) m.Email)
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(Function(m) m.Email)
                @Html.ValidationMessageFor(Function(m) m.Email)
            </div>

            <div class="editor-label">
                @Html.LabelFor(Function(m) m.Password)
            </div>
            <div class="editor-field">
                @Html.PasswordFor(Function(m) m.Password)
                @Html.ValidationMessageFor(Function(m) m.Password)
            </div>

            <div class="editor-label">
                @Html.LabelFor(Function(m) m.ConfirmPassword)
            </div>
            <div class="editor-field">
                @Html.PasswordFor(Function(m) m.ConfirmPassword)
                @Html.ValidationMessageFor(Function(m) m.ConfirmPassword)
            </div>

            <div class="editor-label">
            @Html.LabelFor(Function(m) m.Company, "Companies")
            </div>
            <div class="editor-field">
                @Html.DropDownList("Company", String.Empty)
                @Html.ValidationMessageFor(Function(m) m.Company)
            </div>

            <div class="editor-label">
            @Html.LabelFor(Function(m) m.IsCompanyOwner, "Company Owner?")
            </div>
            <div class="editor-field">
                @Html.CheckBoxFor(Function(m) m.IsCompanyOwner)
                @Html.ValidationMessageFor(Function(m) m.IsCompanyOwner)
            </div>

            <div class="editor-label">
            @Html.LabelFor(Function(m) m.Blog, "Blogs")
            </div>
            <div class="editor-field">
                @Html.DropDownList("Blog", String.Empty)
                @Html.ValidationMessageFor(Function(m) m.Blog)
            </div>

            <div class="editor-label">
            @Html.LabelFor(Function(m) m.IsBlogOwner, "Blog Owner?")
            </div>
            <div class="editor-field">
                @Html.CheckBoxFor(Function(m) m.IsBlogOwner)
                @Html.ValidationMessageFor(Function(m) m.IsBlogOwner)
            </div>

            <p>
                <input type="submit" value="Register" />
            </p>
        </fieldset>
    </div>
End Using

私が得るエラーは次のとおりです。

ディクショナリに渡されたモデル アイテムのタイプは 'System.Web.Security.MembershipUser' ですが、このディクショナリにはタイプ 'MyBlog.RegisterModel' のモデル アイテムが必要です。

このエラーを解決し、ユーザーの情報をモデルとビューのフォームに取得するにはどうすればよいですか?

4

1 に答える 1

2

エラーメッセージは一目瞭然です。ビューは強く型付けされていますが、メソッドが返すMyBlog.RegisterModelものである MembershipUser を渡しています。Membership.GetUserそれでは、正しいモデル タイプをビューに渡します。

Public Function EditRegistry(Optional id As String = Nothing) As ActionResult

    ' get user model
    Dim model = Membership.GetUser(id)

    ' build a view model
    Dim viewModel = New RegisterModel()
    viewModel.Email = model.Email

    ' pass username to view
    ViewData("UserName") = id

    Return View(viewModel)

End Function
于 2012-08-08T18:28:49.210 に答える