Html Helper不会采用样式参数

时间:2015-11-06 13:49:24

标签: c# html css asp.net-mvc razor

能够浏览网格中的页面并查看项目'细节,我需要做一个自定义助手来替换标准的ActionLink。它可以完美地运行,但是对于一件小事:它不像任何其他助手一样接受css类。

这是我的帮助代码:

using System.Collections.Generic;
using System.Web.Routing;
using System.Linq;
using System.Web;

namespace System.Web.Mvc
{
    public static class HtmlExtensions
    {

        public static MvcHtmlString ActionLinkUrlParam(this HtmlHelper helper, string linkText, string actionName, object routeValues = null, object htmlAttributes = null)
        {
            MvcHtmlString link;
            RouteValueDictionary val = new RouteValueDictionary();

            if (routeValues != null)
            {
                val = new RouteValueDictionary(routeValues);
            }

            if (helper.ViewContext.HttpContext.Request.UrlReferrer.Query != "")
            {
                string[] results = helper.ViewContext.HttpContext.Request.UrlReferrer.Query.Replace("?", "").Replace("%2F", "/").Replace("%2f", "/").Split(new string[] { "&" }, StringSplitOptions.None);

                if (results.Length > 0)
                {
                    foreach (var item in results)
                    {
                        val.Add(item.Split(new Char[] { '=' })[0], item.Split(new Char[] { '=' })[1]);
                    }
                }
            }

            if (htmlAttributes == null)
            {
                link = Html.LinkExtensions.ActionLink(helper, linkText, actionName, val);
            }
            else
            {
                Dictionary<string, object> html = new Dictionary<string, object>();
                html.Add("class", htmlAttributes);
                link = Html.LinkExtensions.ActionLink(helper, linkText, actionName, val, html);
            }

            return link;
        }
    }
}

在项目详细信息视图中,我有以下按钮,每个人都使用css类很好,但对于我使用自定义帮助器的那个。这是该代码的一部分:

    <div class="acciones">
    <div class="float-left">
        <p>
             @ViewBag.Menu @Html.ActionLink(Global.DespachoTitle, "Index") / @Html.ActionLink(Global.Details_Title, "Details_KO", new { id=Model.Id }) 
        </p>
    </div>
    <div class="float-right">
        <input data-bind="click: $root.displayDetails" type="submit" class="btn btn-primary" value="Detalle" />
        <input data-bind="click: $root.displayCeder" type="submit" class="btn btn-primary" value="Ceder" />
        <input data-bind="click: $root.displayFacturas" type="submit" class="btn btn-primary" value="Facturas" />
        <input data-bind="click: $root.displayBoletos" type="submit" class="btn btn-primary" value="Boletos" />
        <input data-bind="click: $root.displayMSDs" type="submit" class="btn btn-primary" value="MSD" />
        <input data-bind="click: $root.displayDevoluciones" type="submit" class="btn btn-primary" value="Devoluciones" />
        <input data-bind="click: $root.displayCertificaciones" type="submit" class="btn btn-primary" value="Certificaciones" />
        <input data-bind="click: $root.displayOtrasImputaciones" type="submit" class="btn btn-primary" value="Otras Imputaciones" />
        @Html.ActionLinkUrlParam(Global.BackToList, "Filter", null, new { type = "button", @class = "btn btn-primary active" })
    </div>
</div>

我一直在改变css课程,在网上寻找类似的案例,但我似乎无法为这些特殊情况找到任何东西。

请告诉我是否缺少任何相关信息。

提前致谢。

1 个答案:

答案 0 :(得分:1)

感谢@Jason Evans。他建议使用一个函数让我调查它,在另一个线程中有一些东西建议我可以使用:

var attrs = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
if (!enabled)
{
    attrs.Add("disabled", "disabled");
}
return htmlHelper.DropDownListFor(expression, selectList, null /* optionLabel */, attrs);

我在“attrs”变量中添加了我的css类,就是这样。如果css遭受修改,我将不得不记住这一点,但除此之外还有效。