我搜索,但找不到任何快速的解决方案,MVC 3 htmlhelper创建一个包装方法。我正在寻找的是像:
- @html.createLink("caption","url")
- {
- <html> content in tags </html>
- }
结果应该有
- <a href="url" title="Caption">
- <html> content in tags </html>
- </a>
任何帮助这个。
解决方法
使用BeginForm的方式是返回类型MvcForm意味着IDisposable,以便在使用语句中使用时,MvcForm的Dispose方法会写出关闭< / form>标签。
你可以编写一个完全相同的扩展方法。
这是我刚才写的来演示的。
首先,扩展方法:
- public static class ExtensionTest
- {
- public static MvcAnchor BeginLink(this HtmlHelper htmlHelper)
- {
- var tagBuilder = new TagBuilder("a");
- htmlHelper.ViewContext.Writer
- .Write(tagBuilder.ToString(
- TagRenderMode.StartTag));
- return new MvcAnchor(htmlHelper.ViewContext);
- }
- }
这是我们的新类型,MvcAnchor:
- public class MvcAnchor : IDisposable
- {
- private readonly TextWriter _writer;
- public MvcAnchor(ViewContext viewContext)
- {
- _writer = viewContext.Writer;
- }
- public void Dispose()
- {
- this._writer.Write("</a>");
- }
- }
在你的意见中,你现在可以做:
- @{
- using (Html.BeginLink())
- {
- @Html.Raw("Hello World")
- }
- }
结果如下:
- <a>Hello World</a>
稍微扩展以处理您的确切要求:
- public static MvcAnchor BeginLink(this HtmlHelper htmlHelper,string href,string title)
- {
- var tagBuilder = new TagBuilder("a");
- tagBuilder.Attributes.Add("href",href);
- tagBuilder.Attributes.Add("title",title);
- htmlHelper.ViewContext.Writer.Write(tagBuilder
- .ToString(TagRenderMode.StartTag));
- return new MvcAnchor(htmlHelper.ViewContext);
- }
和我们的观点:
- @{
- using (Html.BeginLink("http://stackoverflow.com","The Worlds Best Q&A site"))
- {
- @Html.Raw("StackOverflow - Because we really do care")
- }
- }
产生结果:
- <a href="http://stackoverflow.com" title="The Worlds Best Q&A site">
- StackOverflow - Because we really do care</a>