MVC ActionLink渲染错误的HTML?

9 浏览
0 Comments

MVC ActionLink渲染错误的HTML?

我写了一个自定义的HtmlHelper,如下所示:

public static MvcHtmlString MdActionLink(this HtmlHelper htmlHelper, string resourceId, string actionName, string controllerName, object routeValues = null, object htmlAttributes = null)
{
    if (routeValues == null && htmlAttributes != null)
        return htmlHelper.ActionLink(ResourcesHelper.GetMessageFromResource(resourceId), actionName, controllerName, htmlAttributes);
    return htmlHelper.ActionLink(ResourcesHelper.GetMessageFromResource(resourceId),
        actionName, controllerName,
        routeValues,
        htmlAttributes);
}

如果routeValueshtmlAttributes都为null,则没有问题。

但是,如果htmlAttributes有值并且routeValues为null,它会将a标签渲染为如下所示:

Exit

这是什么问题?

0
0 Comments

问题出现的原因:

问题出现的原因是在使用MVC的ActionLink方法时,渲染的HTML不正确。可能是由于参数传递不正确或者HTML属性设置有误导致的。

解决方法:

为了解决这个问题,可以自定义一个扩展方法MdActionLink来替代MVC的ActionLink方法。在该方法中,对参数进行判断和处理,以确保渲染的HTML正确。

具体的解决方法如下所示:

public static MvcHtmlString MdActionLink(this HtmlHelper htmlHelper, string resourceId, string actionName, string controllerName, object routeValues = null, object htmlAttributes = null)
{
    if (routeValues == null)
        routeValues = new RouteValueDictionary();
    if (htmlAttributes == null)
        htmlAttributes = new Dictionary();
    htmlHelper.ActionLink(ResourcesHelper.GetMessageFromResource(resourceId),
        actionName, controllerName,
        routeValues,
        htmlAttributes);
}

通过上面的代码,我们自定义了一个名为MdActionLink的扩展方法。该方法接受HtmlHelper对象以及其他参数,其中resourceId是要获取的资源的唯一标识符,actionName和controllerName分别指定要生成链接的Action和Controller的名称。routeValues和htmlAttributes是可选参数,用于传递额外的路由值和HTML属性。

在方法内部,首先对routeValues和htmlAttributes进行了判断和处理。如果它们为null,则分别创建了一个RouteValueDictionary和一个Dictionary对象。然后,调用了htmlHelper的ActionLink方法来生成链接。

通过使用这个自定义的扩展方法,我们可以确保在渲染HTML时传递的参数是正确的,并且生成的链接的HTML属性设置也是正确的,从而解决了MVC ActionLink方法渲染错误HTML的问题。

0