2つのアクションを持つコントローラが1つあります。MVCアプリケーションを適切に構築する方法
Entity Frameworkを使用してデータベースから要求のリストを取得し、ビューに表示する最初のアクションです。
@model List<Request>
@foreach (var request in Model)
{
<tr>
<td>
@Html.DisplayFor(model => request.Id)
</td>
<td>
@Html.DisplayFor(model => request.Title)
</td>
<td>
@Html.DisplayFor(model => request.Message)
</td>
<td>
@Html.DisplayFor(mode => request.CreateDate)
</td>
<td>@Html.ActionLink("Reply", "SendResponse", new { id = request.Id })</td>
</tr>
}
そして、あなたはビューコードI出力でにユーザーを取るのリンクを見れば、最終的要求のためのモデルは
public partial class Request
{
public int Id { get; set; }
public string Title { get; set; }
public string Message { get; set; }
public System.DateTime CreateDate { get; set; }
public Nullable<bool> Responded { get; set; }
}
です:
public class HomeController : Controller
{
public ActionResult HelpRequests()
{
using (var context = new MyDbContext())
{
var items = context.Requests.ToList();
return View(items);
}
}
}
図でありますホーム/ SendResponse/id
これは私の不確実性が入る場所です。
SendResponseアクションの目的は、特定の要求に返信することです。 SendResponseビューでは、リクエストモデルフィールドのいくつかを表示して、作成者がレスポンスに何を含めるべきかを知りたいと思います。
私の具体的な質問は、私は、要求モデルから一部のデータを表示したいので、ビューのモデルは、要求モデルに
に設定されているが、ビューの目的は、送信することになります応答(応答モデルで定義されています)。ですから、リクエストクラスのフィールドに設定されているViewBag。*プロパティを設定し、リクエストモデルの代わりにそれらを使用し、ビューモデルをレスポンスに設定するだけですか?
2つのモデル(この場合は要求と応答)を扱うコントローラを1つ用意するのは大丈夫ですか?要するに
、私はただ一つのモデルからデータを受け取り、そのデータに基づいて新しいモデルを作成し、MVCの組み合わせを構築する方法については、100%確かではありませんよ。
SendResponseコントローラアクションでは、提供されたIDのリクエストデータをdbから取得できます。 dbからの要求データとSendResponseビューで表示したい追加データをラップすることができる別のモデルクラスを作成することができます。 –
ビューに表示するデータに基づいてカスタマイズされたモデルクラスを作成することは、常にOKです。 –
両方のモデルをラップする別のviewmodelを設定する方が、ビューが単一のモデルのバインディングメカニズムのみを受け入れることができます。作成したビューモデルをカスタマイズして、渡すデータの一部を表示することができます。 –