'System.Web.Mvc.HtmlHelper'没有名为'Partial'的适用方法

时间:2015-02-11 21:44:50

标签: c# asp.net-mvc-3 debugging

我收到此错误:

  

错误CS1973:' System.Web.Mvc.HtmlHelper'没有适用的   名为' Partial'的方法但似乎有一个扩展方法   名称。无法动态分派扩展方法。考虑   强制转换动态参数或调用扩展方法   扩展方法语法。"}

我在这里阅读的Razor View Engine : An expression tree may not contain a dynamic operation是因为使用了我正在使用Session的viewbag(?)。

这是我的网络表单:

@using SuburbanCustPortal.MiscClasses

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

<h2>AccountScreen</h2>

<div class="leftdiv">
  <fieldset>
    <legend>Customer Info</legend>
    @Html.Partial("CustomerInfo")
  </fieldset>

  <fieldset>
    <legend>Delivery Address</legend>
    @Html.Partial("DeliveryAddress")
  </fieldset>

  <fieldset>
    <legend>Delivery Info</legend>
    @Html.Partial("DeliveryInfo")
  </fieldset>
</div>

<div class="rightdiv">
  <fieldset> 
    <legend>Balance</legend>
      @Html.Partial("AccountBalance")
  </fieldset>

             @if (SessionHelper.ShowPaymentOptions || SessionHelper.ShowHistory)
             {
               <fieldset>
                 <legend>Account Options</legend>
                 <br/>

                 @using (Html.BeginForm("AccountScreenButton", "Customer", FormMethod.Post))
                 {
                   <div class="sidebysidebuttons">
                     <div class="box">
                       @if (SessionHelper.ShowHistory && SessionHelper.ShowAccountScreenPaymentButton)
                       {
                         <button class="sidebysidebutton1" name="options" value="payment">Make a Payment</button>
                         <button class="sidebysidebutton2" name="options" value="activity">Display Activity</button>
                       }
                       else
                       {
                         if (SessionHelper.ShowAccountScreenPaymentButton)
                         {
                           <button class="leftpaddedsinglebutton" name="options" value="payment">Make a Payment</button>
                         }

                         if (SessionHelper.ShowHistory)
                         {
                           <button class="leftpaddedsinglebutton" name="options" value="activity">Display Activity</button>
                         }
                       }
                     </div>
                   </div>
                 }    
               </fieldset>
             }

  <fieldset> 
      <legend>Billing Info</legend>
        @Html.Partial("BillingInfo", Model)
    </fieldset>
</div>

这是我的SessionHelper的一部分,可以给你一个想法:

public static CustomerData CustomerSessionData
{
  get
  {
    try
    {
      return (CustomerData) HttpContext.Current.Session["CustomerSessionData"];
    }
    catch (Exception)
    {
      return null;
    }
  }
  set { HttpContext.Current.Session["CustomerSessionData"] = value; }
}

    public static bool ShowPaymentTab
    {
      get { return HttpContext.Current.Session["ShowPaymentTab"].ToBool(); }
      set { HttpContext.Current.Session["ShowPaymentTab"] = value; }
    }

我不确定问题是否在表单中,因为当我在表单中设置断点时,它并不止于此。

我有两个问题:

  1. 如何调试表单上的问题?
  2. 我可以不将类用作会话并在表单中引用它吗?我假设这就是问题所在。

1 个答案:

答案 0 :(得分:39)

您的问题是您没有在视图顶部定义模型。因此,默认类型为dynamic类型。

通常情况下,这不是一个问题,但你有这个:

@Html.Partial("BillingInfo", Model)

实际上,这是将动态类型传递给Html.Partial(),这就是抛出错误。

无论如何这是一个毫无意义的调用,只需删除它的Model部分即可。无论如何,传递模型是默认操作,因此您不会尝试做任何不会违约的事情。