#asp.net #asp.net-mvc
#asp.net #asp.net-mvc
Вопрос:
возможно ли отрисовывать строку подобным образом:
public ActionResult Do(){
s = " hello, click here <%=Html.ActionLink("index","index") %> ";
return Content(RenderString(s));
}
результатом будет что-то вроде этого:
hello, click here <a href="/home/index">index</a>
Ответ №1:
Какова цель этого? У вас есть действие контроллера, которое пытается вычислить некоторую строку синтаксиса WebForms string и вернуть ее как содержимое. Почему бы просто не вернуть представление и заставить это представление выполнить работу?
Если вы хотите, чтобы у dynamic были представления (поступающие из базы данных или чего-то еще), вы могли бы написать пользовательский механизм просмотра и персонализировать их местоположение, чтобы ваше действие выглядело следующим образом:
public ActionResult Do()
{
return View();
}
и соответствующее содержимое представления будет извлечено из вашего пользовательского механизма просмотра вместо стандартных расположений файлов.
Если вы хотите преобразовать содержимое представления в строку, это было описано во многих сообщениях в блоге. Наконец, если вы имеете дело с отправкой представлений в виде электронных писем, вероятно, есть лучшие решения.
Итак, в зависимости от того, чего вы пытаетесь достичь, могут быть разные решения.
Комментарии:
1. @Darin Dimitrov так это невозможно?
2. @Omu, конечно, это возможно. Как я сказал в своем ответе, в зависимости от вашей конечной цели существуют разные методы. Еще один момент, который я пропустил, — это написание пользовательского поставщика виртуальных путей . Эта
s
переменная у вас там, откуда она берется?3. @Darin Dimitrov s поступает из базы данных, в основном пользователи получают сообщения, содержащие ссылки на действия в них, и поскольку со временем маршрутизация может быть изменена, я хочу, чтобы они были оценены в конце
4. @ Omu, тогда пользовательский VirtualPathProvider кажется идеальным кандидатом для реализации этого.
5. @Darin Dimitrov это для рендеринга представлений из dll, я хочу рендерить некоторую строку точно так же, как view, например, рендеринг содержимого представления без фактического наличия файла ascx
Ответ №2:
public String Do(){
string s = " hello, click <a href='" Url.Action("Index") "' > here </a>";
return s;
}
тогда, если вы вызовете {Controller} /Do, у вас будет ваша строка
ОТРЕДАКТИРОВАНО
Марко
Комментарии:
1. HTML. ActionLink должен быть оценен
2. @Omu может ли UrlHelper помочь вам, я отредактировал свой ответ и попробовал, и это сработало, я надеюсь, это то, что вы хотели!