2012-01-17 11 views
0

私は部分的にビューを作成していますが、作成ボタンは一度押せばコントローラに到達しません。追加しましコントローラロジックMVC3 Razor Partial Viewはコントローラに返信しません

public class RebateLineController : BaseController 
{ 
    public ActionResult Create() 
    { 
     return View(); 
    } 

    // 
    // POST: /RebateLine/Create 

    [HttpPost] 
    public ActionResult Create(RebateLine rebateline) 
    { 
     if (ModelState.IsValid) 
     { 
      UnitOfWork.RebateLineRepository.Insert(rebateline); 
      UnitOfWork.Save(); 

      return RedirectToAction("Index"); 
     } 

     return View(rebateline); 
    } 
... 
    } 

追加編集::/リベートは、私が作成]をクリックし、以下の後に示されているものである編集

@model RMS.Models.RebateLine 



@using (Html.BeginForm("Create","RebateLine",FormMethod.Post)) { 
@Html.ValidationSummary(true) 
<fieldset> 
    <legend>RebateLine</legend> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.RebateID) 
    </div> 
    <p> 
     <input type="submit" value="Create" /> 
    </p> 
</fieldset> 
} 

リベート/編集/ 1 /からそれがインデックスすなわち/リベートに行く押すと呼び出されている部分への呼び出しです。

@{ Html.RenderPartial("_RebateLines",Model.RebateLines.FirstOrDefault()); } 

最終編集:パーシャルディスプレイが、何もする必要はないように が、私はこれを再設計している誰かが答えを思い付く場合、私は後日戻って、それを修正しようとします。

+0

RebateLineController :: Createアクションのコードを追加できますか? – santiagoIT

+0

もちろん、それは決してそれに到達することはありませんが、私はこれが部分的な宣言方法や内部のhtml形式と関係があると確信しています。 – CouncilScribe

+0

フォームを送信した後に表示される正確なURLは何ですか? – santiagoIT

答えて

0

あなたのコードはすべて見栄えがよいので、私は一見を受けるだろうGlimpseこれはあなたが問題を追跡するのを助けるかもしれない。

1

コントローラの名前はRebateControllerと思われます。 その場合は、次に変更:

@using (Html.BeginForm("Create","RebateLine",FormMethod.Post)) { 

@using (Html.BeginForm("Create","Rebate",FormMethod.Post)) { 

にEDIT

はDebugControllerを作成し、というアクションを追加:Test1をします。 対応するビューを作成します。レイアウトページは使用しないでください。

ただ、本体部にこのマークアップを追加します。

<div> 
@{Html.RenderPartial("_RebateLines",new Model.RebateLines());} 
</div> 

は、デバッグモードでプロジェクトを実行し、/デバッグ/ test1のURLをご覧ください。 RebatteLines :: Createアクションにブレークポイントを配置します。 送信ボタンを押します。 ブレークポイントにヒットする必要があります。 ヒットした場合は、Html.RenderPartialを呼び出すページに何かがあり、フォームが期待されるURL(おそらくいくつかのjavascript)に送信されないようになっていることを意味します。あなたのレイアウトにいるかもしれません。 上記のテストが期待通りに実行されるかどうかを確認します。

+0

私はリベートと呼ばれるものとリベート回線と呼ばれる2つの別々のコントローラを持っています。 – CouncilScribe

+0

コードに間違いはありません。それは本当にうまくいくはずです。作成アクションでブレークポイントを設定しようとしましたか?それが呼び出されていないことを100%確信していますか? – santiagoIT

+0

パーシャルビューをレンダリングするコードを教えてください。あなたは正しいものをレンダリングしていますか? – santiagoIT

0

"RebateLineController"という名前のコントローラとActionResult "Create"というコントローラを使用しています。しかし、あなたは "/ Rebate/Edit/1"と言っています。 URLは正しいですか?

そして、あなたのコードから:

if (ModelState.IsValid) 
    { 
     UnitOfWork.RebateLineRepository.Insert(rebateline); 
     UnitOfWork.Save(); 

     return RedirectToAction("Index"); 
    } 

にModelStateが有効である場合は、与えたとして、ページが「インデックス」にリダイレクトされることは明らかである:

return RedirectToAction("Index"); 

を私は正しいアム?これはあなたのコードから推測できるものです。

よろしく.. スニル

+0

ページ上の部分的な表示は、払い戻しを伴うdeaqlsの場合、URLは問題ありません。 – CouncilScribe

-1

@Html.RenderAction("Create", "RebateLines", new { id = Model.RebateLines.FirstOrDefault().RebateID }) 

を使用して試してみて、以下のようにコントローラを変更します。便利な場合

public class RebateLineController : BaseController 
{ 
    public ActionResult Create(int id) 
    { 
     return View(); 
    } 

// 
// POST: /RebateLine/Create 

[HttpPost] 
public ActionResult Create(int id,RebateLine rebateline) 
{ 
    if (ModelState.IsValid) 
    { 
     UnitOfWork.RebateLineRepository.Insert(rebateline); 
     UnitOfWork.Save(); 

     return RedirectToAction("Index"); 
    } 

    return View(rebateline); 
} 
... 
} 

は答えとして

マーク...それがお役に立てば幸いです。

関連する問題