0

ASP.NET MVC(またはHtml.Helpersとベースページの実装)は、レンダリングと投稿の両方に1つのタイプ(つまり、モデル)があることを前提としています。

これはISPの違反ですね。

カスタムビューから編集ビュー(レンダリングデータとポストデータが異なるビュー)を派生させたいと思っていますEditPageBaseView<TViewModel, TFormData>

問題は、FormDataインスタンス(ViewModel内に格納されている)に対して検証とポスト作業が必要なことですが、MVCはViewModel全体がポストバックされると想定しています。

  1. それを容易にするOOBの方法はありますか?(ある場合は見つかりませんでした)。
  2. サービス(この場合はビュー)によって公開されるさまざまな操作に対して個別のデータ型を使用することは(概念的には)悪い考えですか?
4

2 に答える 2

0

一致する必要はありませんが、デフォルトでは一致します。

それらを一致させたくない場合は、フォームまたはActionLinkで別のモデルを指定できます。

RazorとC#を使用した不一致の例:

Index.chtml:

@model FirstModel

<div>
@using (Html.BeginForm("Action", "ControllerName", new { ParameterName = new SecondModel { First = "First", Second = "Second" } }, FormMethod.Post)) {
<input type="submit" value="Submit Button" />
}
</div>

コントローラー:

public class ControllerName : Controller {

public ActionResult Index() {
return View(new FirstModel());
}

public ActionResult Action(SecondModel ParameterName) {
return View() // Where to now?
}
于 2013-03-05T15:48:42.967 に答える
0

ビュー モデルを構築するときは、CQRS モデルに従う傾向があります。すべてのレンダリングはViewModelクラスで行われ、すべてのポストバックはクラスで行われCommandます。これは不自然な例です。ユーザーを作成するための小さなフォームを持つビューがあるとします。

ViewModelandクラスは次のCommandようになります。

public abstract class ViewModel {}

public abstract class Command: ViewModel

public class CreateUserViewModel : ViewModel
{
    public string Username { get; set; }
    public string Password { get; set; }
    public string PasswordConfirm { get; set; }
}

public class CreateUserCommand : Command
{
    public string Username { get; set; }
    public string Password { get; set; }
    public string PasswordConfirm { get; set; }
}

は、リクエストのモデルとしてUserControllerを作成し、リクエストに対してを期待します。CreateUserViewModelGetCreateUserCommandPost

public ActionResult CreateUser()
{
    // this should be created by a factory of some sort that is injected in
    var model = new CreateUserViewModel();
    return View(model);
}

[HttpPost]
public ActionResult CreateUser(CreateUserCommand command)
{
    // validate and then save the user, create new CreateUserViewModel and re-display the view if validation fails
}

Get ViewCreateUserCommandCreateUserViewModel.

于 2013-01-16T16:39:18.197 に答える