c# - how - mvc custom html helper
''System.Web.Mvc.HtmlHelper'' no tiene un método aplicable llamado ''Parcial'' (1)
Su problema es que no define un modelo en la parte superior de su vista. Debido a esto, el tipo predeterminado es de tipo dynamic
.
Normalmente, esto no es un problema, pero tienes esto:
@Html.Partial("BillingInfo", Model)
Esto es, en efecto, pasar un tipo dinámico a su Html.Partial()
, que es lo que está Html.Partial()
el error.
Esta es una llamada sin sentido de todos modos, simplemente quite la parte del Modelo y debería funcionar. Pasar el modelo es la operación predeterminada de todos modos, por lo que no está intentando hacer nada que no sea el predeterminado.
Estoy recibiendo este error:
error CS1973: ''System.Web.Mvc.HtmlHelper'' no tiene un método aplicable llamado ''Parcial'' pero parece tener un método de extensión con ese nombre. Los métodos de extensión no pueden ser enviados dinámicamente. Considere lanzar los argumentos dinámicos o llamar al método de extensión sin la sintaxis del método de extensión. "}
Por lo que leí aquí Razor View Engine: un árbol de expresiones puede no contener una operación dinámica porque se debe al uso de viewbag (?), Que realmente estoy usando Session.
Este es mi formulario web:
@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>
Esto es parte de mi SessionHelper para darle una idea:
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; }
}
No estoy seguro de si el problema está en el formulario, ya que cuando coloco un punto de interrupción en el formulario, no se detiene allí.
Tengo dos preguntas:
- ¿Cómo depuro dónde está el problema en el formulario?
- ¿No puedo usar una clase como sesión y hacer referencia a ella en el formulario? Supongo que ahí es donde está el problema.