Я использую ASP.NET MVC 3
с razor
. Я также использую последнюю версию Telerik MVC
.
У меня есть сетка, отображающая список приложений. Каждое приложение имеет состояние. Мне нужно написать вспомогательный метод для отображения ссылок в каждой строке сетки в зависимости от текущего состояния каждого приложения. Если состояние 1, то мне нужно отобразить ссылку «Изменить». Помощник, который у меня есть, выглядит так:
public static string ActionLinks(this HtmlHelper helper, string grantApplicationId, string grantApplicationStateId)
{
List<TagBuilder> linkList = new List<TagBuilder>();
string actionLinks = string.Empty;
if (grantApplicationStateId == "1")
{
// Edit link
TagBuilder editLink = new TagBuilder("a");
editLink.MergeAttribute("href", "/GrantApplication/Edit/" + grantApplicationId);
editLink.InnerHtml = "Edit";
linkList.Add(editLink);
}
foreach (TagBuilder link in linkList)
{
actionLinks += link.ToString() + "<br>";
}
return actionLinks;
}
Столбец сетки в моей сетке Telerik выглядит так:
column.Bound(x => x.Id)
.ClientTemplate(@Html.ActionLinks("<#= Id #>", "<#= GrantApplicationStateType.Id #>"))
.Title("Actions");
Модель моего вида выглядит так:
public class GrantApplicationListViewModel
{
// Just partial properties
public GrantApplicationStateType GrantApplicationStateType { get; set; }
}
И GrantApplicationStateType выглядит так:
public class GrantApplicationStateType : IEntity
{
public int Id { get; set; }
public string Name { get; set; }
}
При вызове вышеупомянутого вспомогательного метода значение grantApplicationStateId равно "<# = GrantApplicationStateType.Id #>". Как бы я получить значение, которое было передано? Я имею в виду, что если было передано значение 1, как бы получить 1, потому что в настоящее время это «<# = GrantApplicationStateType.Id #>»?
ОБНОВЛЕНИЕ 2012-02-06
Я попробовал ссылку Дарина, использовал точно такой же пример в моем коде, но изменил следующее:
column.ActionLink("Open", "Edit", "GrantApplication", item => new { id = item.Id, applicationStateId = item.GrantApplicationStateType.Id });
Мне нужно пройти через 2 значения. Мне нужно сделать пару операторов if для идентификатора состояния приложения предоставления, а затем вернуть клиенту ссылки на конкретные действия. Но происходит сбой при циклическом просмотре значений в:
if (memberExpression.Expression is ParameterExpression)
value = string.Format("<#= {0} #>", memberExpression.Member.Name);
else
value = GetValue(memberExpression);
Первый переданный параметр проходит через первую / истинную часть оператора if:
value = string.Format("<#= {0} #>", memberExpression.Member.Name);
.. но второй параметр проходит через ложную часть if:
value = GetValue(memberExpression);
Какая разница между 2?
А затем происходит сбой в методе GetValue со следующим сообщением:
variable 'item' of type MyProject.ViewModels.GrantApplicationListViewModel' referenced from scope '', but it is not defined
Я не могу заставить это работать, и я искал еще несколько образцов и не мог найти.