2014-02-19 6 views
1

У меня есть метод GenerateLinks(), который принимает объект ActionResult с именем result. В этом методе я хочу генерировать ссылки с использованием модифицированной версии result, которая будет содержать дополнительный параметр id для каждого id. Обратите внимание: HtmlHelper.ActionLink() требует ActionResult.Добавить параметры в существующий объект ActionResult

// Client-side 
@Html.GenerateLinks(Mvc.Areas.MyArea.Index(), Model.ids); 

// Server-side 
MvcHtmlString GenerateLinks(this HtmlHelper helper, ActionResult result, List<string> ids) 
{ 
    var sb = new StringBuilder(); 
    foreach (var id in ids) 
    { 
     // How to add id to result where result becomes Mvc.Areas.MyArea.Index(id)? 
     sb.Append(helper.ActionLink(id, result-with-id-as-param); 
     sb.Append("<br/>"); 
    } 
    return new MvcHtmlString(sb.ToString()); 
} 

Даже если я знаю, что есть альтернативные способы создания этих ссылок, помимо использования ActionLink, мой окончательный вопрос: Можно ли добавить id как пары к существующим ActionResult объекту? Если да, то как?

Спасибо.

ответ

0

Найдено ответ:

foreach (var id in ids) 
{ 
    // How to add id to result where result becomes Mvc.Areas.MyArea.Index(id)? 

    // *** ANSWER 
    result.GetRouteValueDictionary()["id"] = id; 
    // *** ANSWER 

    sb.Append(helper.ActionLink(id, result); 
    sb.Append("<br/>"); 
} 
0

Изменить ваш ActionResult

public ActionResult Index(id = defaultvalue){ 
    //AR code here 
} 

а затем передать Id, если это необходимо. вы также устанавливаете defaultvalue для id в случае, если ничего не прошло.

+0

Мой код контроллер уже обрабатывает состояние по умолчанию. Мой вопрос: как я могу изменить объект «результат», чтобы перейти от «Mvc.Areas.MyArea.Index()» к «Mvc.Areas.MyArea.Index (id)», если это возможно? – MarkG

+0

Да, просто передайте идентификатор. пока вы можете передать это действие из представления в контроллер, он должен работать. 'Mvc.Areas.MyArea.Index (id)' – user3311522

+0

Спасибо, я действительно нашел ответ: используйте 'GetRouteValueDictionary.Add()' следующим образом: 'result.GetRouteValueDictionary(). Добавить (« id », id);' I выведет более четкий ответ после истечения 8-часового окна. – MarkG

Смежные вопросы