6

1 つのビューに複数のフォームを追加できますか? これは 1 つのモデルのみを使用して行うことができますか、それともフォームごとに異なるモデルを使用する必要がありますか? 誰かが良い例で私を説明したり、詳細に説明している良い記事を提案したりできますか.

4

3 に答える 3

17

これは良い質問です。私が mvc の初心者だったとき、私自身これに問題がありました。

ここでの良い例は、同じページの登録フォームとログインフォームです。

これを解決するために欠かせないキーワードがViewModelです。

Model クラスで:

public class LoginModel
{
    public string UserName { get; set; }
    public string UserPassword { get; set; }
}

public class RegisterModel
{
    public int UserId { get; set; }
    public string UserName { get; set; }
    public string UserPassword { get; set; } 
}

public class ViewModel
{
    public LoginModel LoginModel { get; set; }
    public RegisterModel RegisterModel { get; set; }
}

あなたのコントローラーで:

    public ActionResult Index()
    {
        var model = new ViewModel();
        model.LoginModel = new LoginModel();
        model.RegisterModel = new RegisterModel();
        return View(model);
    }

あなたのビューでは、1 つのメイン ビューと 2 つの部分ビューを使用して分割しました。

メイン ビュー:

@model YourProject.Models.ViewModel

@Html.Partial("_LoginForm", Model.LoginModel)
@Html.Partial("_RegisterForm", Model.RegisterModel)

部分ビュー _LoginForm:

@model YourProject.Models.LoginModel

@using (Html.BeginForm("Login", "Home", FormMethod.Post))
{
    @Html.TextBoxFor(x => x.UserName)
    @Html.PasswordFor(x => x.UserPassword)

    <input type="submit" value="Log In" />
}

部分ビュー _RegisterForm:

@model YourProject.Models.RegisterModel

@using (Html.BeginForm("Register", "Home", FormMethod.Post))
{
    @Html.TextBoxFor(x => x.UserName)
    @Html.PasswordFor(x => x.UserPassword)

    <input type="submit" value="Register" />
}

不明なコードがある場合はお尋ねください。

于 2013-07-25T14:20:48.697 に答える
1

Larsの答えは良い解決策です。私は次のようなものでも行きます:

public class RegisterModel : LoginModel
{
    public int UserId { get; set; }
}

このようにして、基本的なモデル クラスを拡張するだけで、数行のコードを節約できます。

于 2013-07-25T15:12:47.273 に答える