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 包装在 insideAccountScreen.cshtml语句@using (Html.BeginForm(中(并将其从 中丢弃MakePayment.cshtml)。

于 2012-11-19T18:13:55.977 回答