Как получить значение при передаче в вспомогательный метод



Я использую 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;
}


Столбец сетки в моей сетке Телерика выглядит так: это:



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 равно "". Как я получу значение, которое было передано? Я имею в виду, если значение равно 1, которое было передано, как я получу 1, потому что в настоящее время это ""?



Обновление 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


Я не могу заставить это работать, и я искал еще несколько образцов и не смог найти ни одного.
642   1  

1 ответ:

Вы не можете сделать это с помощью помощника. В ASP.NET помощники MVC работают на сервере. Обратите внимание на имя ClientTemplate в сетке Телерика? Это должно работать на клиенте.

То, что он делает, это то, что он просто использует <#= Id #> в качестве заполнителя для помощника на стороне сервера, который будет генерировать некоторый HTML и на стороне клиента, сетка Telerik будет делать простую замену строки, чтобы поместить значение, которое известно только на клиенте.

В данный момент вызывается помощник на стороне сервера ActionLinks , сетка Telerik не может передать вам фактическое значение, которое известно только на клиенте.

Вы можете посмотреть на следующий пост в блоге Для хорошего расширения.

Comments

    Ничего не найдено.