簡體   English   中英

模型未傳遞給渲染視圖

[英]Model not being passed to rendered view

我在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>       
  }

我的CustomerController:

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) ,但模型中[HttpPost] public ActionResult MakePayment2(CustomerData model)值。

我知道正在填充AccountScreen的數據初始模型,因為正在呈現的其他視圖正在顯示數據。

有誰看到我做錯了什么?

問題是除了提交按鈕之外,表單中沒有任何內容。 您需要確保輸入字段(文本框,選擇列表或隱藏字段),因為這些是將數據發布回控制器的內容。

您可以嘗試在局部視圖中使用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>       
}

根據評論進行編輯

無論出於何種原因,Razor都不包含Html.HiddenForModel()方法。 可能的解決方法:

相關問題在這里:

問題是,您正在創建一個只包含提交按鈕的表單。

提交時,它不會向服務器發回任何內容,因此您的函數會收到一個空模型。

@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>

更多細節 :

因為在邏輯中你然后重定向到新頁面來收集付款信息,你不想讓用戶有機會弄亂你的模型,因此你應該從你的Context查詢你的客戶數據,而不是信任提交的內容。 POST。

因此,如果這樣你真的需要添加:

@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>       
}

這樣,您就可以在服務器端代碼中恢復模型。

基本上,您的表單沒有提交任何內容,因為表單范圍內沒有輸入字段。 嘗試包所有的HTML在AccountScreen.cshtml@using (Html.BeginForm(陳述(和扔出去MakePayment.cshtml )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM