我有一个用作ViewModel的类'IncomeStatement'。这个类有一个属性,可以生成一些相当复杂的html:
public MvcHtmlString HtmlPeriods { get; set; }
....
StringBuilder htmlPeriods = new StringBuilder(100);
htmlPeriods.AppendFormat(
"<td><a href='/Forecast/IndexPeriod?Period={1}'>{0}</a></td>",
inc.NetSales, per.Period.PeriodID);
....
HtmlPeriods = MvcHtmlString.Create(htmlPeriods.ToString())
然后在Razor文件中我使用HtmlPeriods属性,它可以正常工作:
<th></th>@Model.HtmlPeriods<td></td>
但是,如果我想在我的班级中使用Html.ActionLink(...)来创建很好的Razorlike链接, 像这样的东西:
string forecastLink =
Html.ActionLink("Edit Forecast", "/Forecast/IndexEdit?PeriodID=2005Q1");
我该怎么做?
答案 0 :(得分:4)
您可以使用HtmlHelper类来执行此操作。我想你会想要GenerateLink方法。
示例:
string link = HtmlHelper.GenerateLink(HttpContext.Current.Request.RequestContext, System.Web.Routing.RouteTable.Routes, "My link", "Default", "Index", "Home", null, null);
答案 1 :(得分:0)
在您的情况下,定义HTML帮助程序而不是在模型上使用属性和方法更为正确。例如:
using System.Web.Mvc;
using System.Web.Mvc.Html;
public static class HtmlExtensions
{
public static MvcHtmlString HtmlPeriods(this HtmlHelper<SomeViewModel> html)
{
// here you can use html.ActionLink in order
// to generate the desired markup
// you also have access to the view model here:
SomeViewModel model = html.ViewData.Model;
...
}
}
然后在你看来:
@Html.HtmlPeriods()