0

mvc3を使用して、作成から編集までのアクションから来たかどうかを通知する変数はありますか?

ルーティングがGETでも使用されている場合は、特定の動作が必要です。それ以外の場合、CreateActionが起動されている場合は、別のコンテキスト編集を開きます。

最初の解決策の失敗:追加のアクション編集の作成、起動:The current request for action 'Edit' on controller type 'XController' is ambiguous between the two action methods

さらに重要なのは、MVCの誤解がありますか?この解決策は誰にとっても奇妙に聞こえますか?私はMVCで素晴らしい疑問に直面しています。:)

4

4 に答える 4

1

Add アクションから来たかどうかを示すオプションのパラメーターを Edit アクションに追加するか、まったく新しいアクションを (Edit からの固有の名前で) 作成することができます。

前者は次のようになります。

public ActionResult Edit(int id, bool? fromCreate = false)
{
    if(fromCreate)
    {
        // do your special processing
    }
}

そして後者は、明らかに、次のようになります。

public ActionResult Edit(int id)
{
}

public ActionResult EditNewlyCreated(int id)
{
}
于 2012-04-23T18:33:25.227 に答える
0

MyViewビューでこれをリンクする何かがある場合:

          @model ModelClass

          @Html.BeginForm()
          {
               if(Model.Id > 0)
               {
                   @Html.HiddenFor(m => m.Id);
               }

               ...
          }

そしてコントローラーで:

     public ActionResult Edit(int id)
     {
           var model = modelRepository.GetById(id);
           Return View("MyView", model);
     }

     [HttpPost]
     public ActionResult Edit(int id, FormCollection collection)
     {
           var model = modelRepository.GetById(id);
           TryUpdateModel(model)
           {
                modelRepository.Save(model);
           }
     }

     public ActionResult Create()
     {
           var model = new ModelClass();
           Return View("MyView", model);
     }

     [HttpPost]
     public ActionResult Create(ModelClass model)
     {
           ...
     }

ビューで、Model.Id > 0 の場合は、編集アクションを使用してビューに入ったということであり、フォーム投稿時に、投稿パラメーターに Id フィールドがある場合 (id は非表示)、Edit(with HttpPost) が呼び出されます。 Id パラメータではない場合、Create アクションが呼び出されます

于 2012-04-23T19:52:41.070 に答える
0

ビューの作成またはコントローラーの作成アクションで (アクション内にある場合は、かみそりのマークアップはありません):

@{ TempData["FromCreate"] = true; }

そして、あなたの edit get アクションで:

public ActionResult Edit()
{
 if( TempData.ContainsKey("FromCreate") )
 {
  var fromCreate = (bool)TempData["FromCreate"];
  TempData.Remove("FromCreate");
  if( fromCreate )
  {
   //insert logic
  }
 }
}
于 2012-04-23T19:05:11.420 に答える
-1

2つの編集メソッドがある場合、それらを区別するために異なるメソッド入力が必要です。

public ActionResult Edit(int id)
{
    return View(db.GetWidget(id));
}

public ActionResult Edit(int id, string username)
{
    ViewBag.Username = username;
    return View(db.GetWidget(id));
}

または、オプションのパラメータを使用してメソッドを1つにするだけです

public ActionResult Edit(int id, string username = "")
{
    ViewBag.Username = username;
    return View(db.GetWidget(id));
}

また、[HttpGet]、[HttpPost]などのメソッド属性をペイントすることをお勧めします。

于 2012-04-23T18:36:05.393 に答える