0

私はいくつかのプロジェクトに取り組んでいます(実際にリファクタリングしています)、管理パネルがあり、通常の管理アクションADD / EDIT / LISTがあり、データベースへの/からのエンティティの挿入/更新/またはリストです。

このプロジェクトで私が見つけたのは、 Add と Update ViewModels と Views の間に常に重複コードがあることです。これは、それらの間で小さな変更を加えたコピーペーストです。それは次のようなものです:

EditCardsViewModel AddCardViewModel

私が言ったように、ほぼ完全に同一です。次に、 EditCardVIew は EditCardsViewModel を Model として使用し、 AddView は AddCardViewModel を使用します。私にとってはコードの重複です。これを作成した開発者に連絡したとき、彼は、これらはベスト プラクティスであり、非常に読みやすいと言いました。問題は、これに対するベストプラクティスは何ですか? MVC で ADD/UPDATE/LIST を実行する方法について説明している、良い記事を教えてください。

ありがとう。

4

2 に答える 2

1

テンプレートをMVCScaffoldingでダウンロードすると、AddEditViewタイプのデザイン用に最適化されます。このブログは、それを使用するための役立つリソースです。

于 2013-03-11T08:42:01.283 に答える
1

はい、Create と Edit は実質的に同じなので、通常は次のようにします。

コントローラ:

public class ActivityController : BaseController
    {
        public ActionResult Index()
        {
            var model = //Get your List model here...

            return View(model);
        }

        public ActionResult Create()
        {
            var model = new ActivityModel(); //Create new instance of whatever your model is
            return View("Edit", model); //NOTE: Pass the model to the "Edit view
        }

        public ActionResult Edit(int id)
        {
            var model = // your logic here to get your model based on ID param
            return View(model);
        }

        [HttpPost]
        public ActionResult Delete(int id)
        {
            try
            {
                // your logic here to delete based on ID param
                return Json(new { Success = true, Message = "Entity updated" }); //AJAX result
            }
            catch (Exception x)
            {
                return Json(new { Success = false, Message = x.GetBaseException().Message }); //AJAX result
            }
        }

        [HttpPost]
        public ActionResult Update(ActivityModel model)//a single action to handle both add and edit operations
        {
            if (!ModelState.IsValid)
            {
                return Json(new { Success = false, Message = "Please correct any errors and try again" });//AJAX result
            }

            try
            {
                if (entity.Id == 0)
                {
                    //your logic for inserting
                }
                else
                {
                    //your logic for updating
                }

                return Json(new { Success = true });//AJAX result
            }
            catch (Exception x)
            {
                return Json(new { Success = false, Message = x.GetBaseException().Message }); //AJAX result
            }
        }
    }

このように、ほとんどの場合、 と の 2 つのビューを作成する必要がありIndex.cshtmlますEdit.cshtml

編集ビューにこれがあることを覚えておいてください: @Html.HiddenFor(m => m.Id)

これは、Update()アクションで挿入または更新を行う必要があるかどうかを確認するために使用されます。

あなたのコードを見なければ、それがあなたの状況に当てはまるかどうかはわかりません...

于 2013-03-10T10:56:25.230 に答える