模型未传递给渲染视图

时间:2012-11-19 18:03:38

标签: c# asp.net-mvc model

我在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),但模型中有空值。

我知道正在填充AccountScreen的数据初始模型,因为正在呈现的其他视图正在显示数据。

任何人都能看到我做错了什么?

3 个答案:

答案 0 :(得分: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>       
}

根据评论进行修改

Razor不包含Html.HiddenForModel()方法,无论出于何种原因。可能的解决方法:

相关问题:

答案 1 :(得分: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>

更多详情:

由于在逻辑中您然后重定向到新页面以收集付款信息,您不希望让用户有机会弄乱与您的模型,因此您应该查询您的客户数据从您的上下文而不是信任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>       
}

这样,您就可以在服务器端代码中恢复模型了。

答案 2 :(得分:0)

基本上,您的表单不提交任何内容,因为表单范围内没有输入字段。尝试将AccountScreen.cshtml中的所有html包装在@using (Html.BeginForm(语句中(并将其从MakePayment.cshtml中删除)。