1

MakePayment.cshmtl ビューでモデルのデータを取得する際に問題が発生しています。

AccountScreen.cshtml は MakePayment.cshtml ビューを呼び出しています。

@model SuburbanCustPortal.SuburbanService.CustomerData      

@{
    ViewBag.Title = "Account Screen";
 }

<h2>AccountScreen</h2>

<div class="leftdiv">
  <fieldset>
    <legend>customer info</legend>
    @Html.Partial("CustomerInfoPartialView", Model)
  </fieldset>

  <fieldset>
    <legend>delivery address</legend>
    @Html.Partial("DeliveryAddressPartialView", Model)
  </fieldset>

  <fieldset>
    <legend>delivery info</legend>
    @Html.Partial("DeliveryInfoPartialView", Model)
  </fieldset>
</div>

<div class="rightdiv">
  <fieldset> 
    <legend>balance</legend>
    <div>
      @Html.Partial("BalancePartialView", Model)
    </div>    
  </fieldset>

  <fieldset> 
    <legend>payment</legend>
    <div>
      @Html.Partial("MakePayment", Model)
    </div>    
  </fieldset>

  <fieldset> 
    <legend>billing info</legend>
    <div>
      @Html.Partial("BillingInfoPartialView", Model)
    </div>    
  </fieldset>
</div>

私の MakePayment.cshtml ビュー:

@model SuburbanCustPortal.SuburbanService.CustomerData

  @using (Html.BeginForm("MakePayment2", "Customer", FormMethod.Post))
  {
    <div style="text-align:center;">
      <input class="makePaymentInput" type="submit" value="Make a Payment" />
    </div>       
  }

私のカスタマーコントローラー:

public ActionResult AccountScreen(LogOnModel model)
{
  return ShowCustomer(model.AccountNumber);
}

public ActionResult MakePayment(CustomerData model)
{
  return View("MakePayment", model);
}

[HttpPost]
public ActionResult MakePayment2(CustomerData model)
{
  //CustomerData model = new CustomerData();
  var newmodel = new PaymentModel.SendToGateway();
  newmodel.AccountBalance = model.TotalBalance;
  newmodel.Amount = model.TotalBalance;

  return RedirectToAction("PrePayment", "Payment", newmodel);
}

public ActionResult MakePayment(CustomerData model)に到達することはありません。

私の問題:[HttpPost] public ActionResult MakePayment2(CustomerData model)に到達していますが、モデルにはヌルが含まれています。

レンダリングされている他のビューがデータを表示しているため、AccountScreen のデータ初期モデルが取り込まれていることがわかります。

私が間違っていることを誰かが見ていますか?

4

3 に答える 3

2

問題は、送信ボタン以外にフォーム内に何もないことです。入力フィールド (テキスト ボックス、選択リスト、非表示フィールドのいずれか) が存在することを確認する必要があります。これは、データがコントローラーにポストされるためです。

EditorForModel部分ビュー内で使用してみることができます:

@using (Html.BeginForm("MakePayment2", "Customer", FormMethod.Post))
{
    @Html.EditorForModel()
    <div style="text-align:center;">
      <input class="makePaymentInput" type="submit" value="Make a Payment" />
    </div>       
}

コメントに基づいて編集

Html.HiddenForModel()Razor には、何らかの理由でメソッドが含まれていません。考えられる回避策:

関連する質問はこちら:

于 2012-11-19T18:14:24.523 に答える
2

問題は、送信ボタン以外に何も含まれていないフォームを作成していることです。

送信すると、サーバーには何も返されないため、関数は空のモデルを受け取ります。

@using (Html.BeginForm("MakePayment2", "Customer", FormMethod.Post))
  {
    <div style="text-align:center;">
      <input class="makePaymentInput" type="submit" value="Make a Payment" />
    </div>       
  }

これは次のように変換されます。

<form method="POST" action="{url}">
    <div style="text-align:center;">
      <input class="makePaymentInput" type="submit" value="Make a Payment" />
    </div>
</form>

詳細:

ロジックでは、支払い情報を収集するために新しいページにリダイレクトするため、モデルをいじる機会をユーザーに与えたくないため、送信されたものを信頼するのではなく、コンテキストから顧客データをクエリする必要があります。ポスト。

したがって、これが本当に追加する必要があるのは次のとおりです。

@using (Html.BeginForm("MakePayment2", "Customer", FormMethod.Post))
{
   @Html.HiddenFor(model => model.{ID Field})
   <div style="text-align:center;">
     <input class="makePaymentInput" type="submit" value="Make a Payment" />
   </div>       
}

このようにして、モデルをサーバー側のコードに戻すことができます。

于 2012-11-19T18:16:33.243 に答える
0

基本的に、フォームスコープ内に入力フィールドがないため、フォームは何も送信しません。すべてのhtmlをステートメントAccountScreen.cshtml内でラップしてみてください@using (Html.BeginForm((そしてそれをから破棄してくださいMakePayment.cshtml)。

于 2012-11-19T18:13:55.977 に答える