动作图像MVC3 Razor

9 浏览
0 Comments

动作图像MVC3 Razor

在MVC3中使用Razor替换链接为图像的最佳方法是什么?目前我只是简单地这样操作:\n

Edit 

\n有更好的方法吗?

0
0 Comments

问题的出现原因:这段代码是一个扩展方法,用于生成包含图片的超链接。但是在使用这个方法时,如果图片链接到不同的控制器的一个动作上,会出现问题。

解决方法:在这种情况下,需要使用另一个重载的方法,该方法接受控制器名称作为参数,并使用ActionLink方法。可以修改代码如下:

public static MvcHtmlString ActionImage(this HtmlHelper html, string action, string controllerName, object routeValues, string imagePath, string alt)
{
    var url = new UrlHelper(html.ViewContext.RequestContext);
    // 构建标签
    var imgBuilder = new TagBuilder("img");
    imgBuilder.MergeAttribute("src", url.Content(imagePath));
    imgBuilder.MergeAttribute("alt", alt);
    string imgHtml = imgBuilder.ToString(TagRenderMode.SelfClosing);
    // 构建标签
    var anchorBuilder = new TagBuilder("a");
    anchorBuilder.MergeAttribute("href", url.Action(action, controllerName, routeValues));
    anchorBuilder.InnerHtml = imgHtml; // 将标签包含在内
    string anchorHtml = anchorBuilder.ToString(TagRenderMode.Normal);
    return MvcHtmlString.Create(anchorHtml);
}

在这个修改后的方法中,可以使用控制器名称作为参数来生成超链接,从而解决这个问题。

0
0 Comments

问题:Action Image MVC3 Razor的出现的原因和解决方法

在这个讨论中,提到了创建一个HtmlHelper的扩展方法来简化CSHTML文件中的代码。通过使用这个扩展方法,可以用一个方法来代替标签。以下是样例代码和扩展方法:

// 在CSHTML中的示例用法
.ActionImage("Edit", new { id = MyId }, "~/Content/Images/Image.bmp", "Edit")

// 扩展方法
public static MvcHtmlString ActionImage(this HtmlHelper html, string action, object routeValues, string imagePath, string alt)
{
    var url = new UrlHelper(html.ViewContext.RequestContext);
    // 构建标签
    var imgBuilder = new TagBuilder("img");
    imgBuilder.MergeAttribute("src", url.Content(imagePath));
    imgBuilder.MergeAttribute("alt", alt);
    string imgHtml = imgBuilder.ToString(TagRenderMode.SelfClosing);
    // 构建标签
    var anchorBuilder = new TagBuilder("a");
    anchorBuilder.MergeAttribute("href", url.Action(action, routeValues));
    anchorBuilder.InnerHtml = imgHtml; // 将标签包含在内
    string anchorHtml = anchorBuilder.ToString(TagRenderMode.Normal);
    return MvcHtmlString.Create(anchorHtml);
}

讨论中提到,还可以添加一个重载方法,允许指定操作的控制器。

另外,还提到了使用T4MVC的方法,只需要将routeValues的类型更改为ActionResult,然后在url.Action函数中将routeValues更改为routeValues.GetRouteValueDictionary()

对于如何在视图中访问扩展方法的问题,建议将方法放在一个静态类中,并在Web.config文件的`/configuration/system.web/pages/namespaces`元素中引用该类的命名空间。

还有关于如何改变图片大小的问题,可以在html属性中添加style="height:150px;"来改变图片的大小。

此外,还有一些建议和解决方案,如将扩展方法放在项目的哪个位置、在使用Areas时需要在所有Web.config文件中添加对类命名空间的引用等。

最后,还有一个提议是使用CSS类来代替扩展方法,将图片作为背景图,并使用CSS样式来控制大小和显示方式。

以上就是关于Action Image MVC3 Razor问题出现原因和解决方法的整理和总结。

0