1

すべてではなく、複数のコントローラー間で共通のメソッドがあります。メソッドをコントローラーベースに配置し、他のすべてのコントローラーがそれを継承するのは正しいですか?

public class BaseController : Controller
{
    public IEnumerable<SelectListItem> GetStatus()
    {
        IList<SelectListItem> status = new List<SelectListItem>();

        status.Add(new SelectListItem() { Text = "Select", Value = "" });

        Enum.GetValues(typeof(Status)).Cast<Status>().ToList().Select(x => new SelectListItem()
        {
            Text = x.ToString(),
            Value = ((byte)x).ToString()
        }).ToList().ForEach(status.Add);

        return status;
    }
}

public class DownloadController : BaseController
{
    public ActionResult New()
    {
        NewViewModel newViewModel = new NewViewModel();

        newViewModel.Status = GetStatus();

        return View(newViewModel);
    }
}
4

4 に答える 4

2

この行に基づいて、

newViewModel.Status = GetStatus();

GetStatusesはコントローラーのメソッドであってはならないと私は主張します。コントローラは、Http要求を処理し、http応答を返す必要があります。これらの応答は、ファイル、ビュー、jsonなどです。ただし、これはGetStatusesの使用方法ではなく、Http応答として返されることを意図していないように見えます。これが実際に当てはまる場合は、他の場所に移動する必要があります。

私のMVCアプリケーションには、常にビューモデルを提供するサービスレイヤーがあります。したがって、私のアプリケーションでは、このサービスレイヤーがステータスをサーバー化します。

于 2012-01-06T18:06:24.140 に答える
2

それは正しいようです。おそらく、静的にして保護することができます。

于 2012-01-06T17:48:04.443 に答える
2

私は実際には別のアプローチを取るでしょう。これには、次のようなカスタム HTML ヘルパーを使用します。

http://blogs.msdn.com/b/stuartleeks/archive/2010/05/21/asp-net-mvc-creating-a-dropdownlist-helper-for-enums.aspx

そうすれば、次のように使用できます。

 <%: Html.EnumDropDownListFor(model => model.EnuProperty) %>

Meta Description 属性を使用して Enum 名の出力をカスタマイズできる Simon から提出された回答を好みます。

ASP.NET MVC で列挙型からドロップダウン リストを作成するにはどうすればよいですか?

于 2012-01-06T17:52:34.357 に答える
1

継承よりも構成を優先し、コードを別のオブジェクトにカプセル化してから、オブジェクトをコントローラーに挿入します。特にこの場合。

この場合、Enum リストのレンダリングを設定することは、部分的なコントローラー/ビューにさらに適している可能性があります。

于 2012-01-06T17:45:44.577 に答える