рендерить строку в MVC так же, как рендеринг представления, возможно?

#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 помочь вам, я отредактировал свой ответ и попробовал, и это сработало, я надеюсь, это то, что вы хотели!