2013-10-01 3 views
0

Предположим, я храню url в базе данных, и теперь мне нужен атрибут действия формы или URL-адрес ActionLink должны указывать на URL-адрес, хранящийся в моей базе данных. когда мы используем ActionLink, тогда мы определяем имя метода управленияи тот же самый способ, когда мы используем @ Html.BeginForm(), тогда мы также указываем контроллер & имя метода действия. поэтому как мы можем настроить код ActionLink & BeginForm(), в результате он всегда должен указывать URL-адрес, который хранится в базе данных. пожалуйста, направляйте меня с концепцией. спасибоКак сгенерировать и отобразить URL из базы данных ASP.Net MVC

+5

Почему бы просто не показать значение в теге привязки в свойстве href? – Snowburnt

ответ

2

Мне просто положить html-теги с моделью слишком многословно. Я бы предпочел создать пользовательский html-помощник, который будет инкапсулировать логику, лежащую в основе рендеринга тегов, вы можете взглянуть на код mvc here, но это может быть что-то вроде этого:

 private static MvcForm MyFormHelper(this HtmlHelper htmlHelper, string formAction, FormMethod method, IDictionary<string, object> htmlAttributes) 
     { 

      //you can use service locator for getting your database artifacts 
      //place your custom logic 

      TagBuilder tagBuilder = new TagBuilder("form"); 
      tagBuilder.MergeAttributes(htmlAttributes); 
      // action is implicitly generated, so htmlAttributes take precedence. 
      tagBuilder.MergeAttribute("action", formAction); 
      // method is an explicit parameter, so it takes precedence over the htmlAttributes. 
      tagBuilder.MergeAttribute("method", HtmlHelper.GetFormMethodString(method), true); 

      bool traditionalJavascriptEnabled = htmlHelper.ViewContext.ClientValidationEnabled 
               && !htmlHelper.ViewContext.UnobtrusiveJavaScriptEnabled; 

      if (traditionalJavascriptEnabled) 
      { 
       // forms must have an ID for client validation 
       tagBuilder.GenerateId(htmlHelper.ViewContext.FormIdGenerator()); 
      } 

      htmlHelper.ViewContext.Writer.Write(tagBuilder.ToString(TagRenderMode.StartTag)); 
      MvcForm theForm = new MvcForm(htmlHelper.ViewContext); 

      if (traditionalJavascriptEnabled) 
      { 
       htmlHelper.ViewContext.FormContext.FormId = tagBuilder.Attributes["id"]; 
      } 

      return theForm; 
     } 
+0

ViewContext.FormIdGenerator - это внутренний метод, который вы не сможете сделать только в своем коде. – liuhongbo

5

Почему вы хотите использовать помощники ActionLink или BeginForm, если хотите использовать URL-адрес, хранящийся в вашей базе данных?

<a href="@Model.UrlComingFromYourDatabase">Click me</a> 

кажется просто отлично. Эти помощники предназначены для использования для составления URL-адреса, предоставляя имена контроллеров и действий.

+0

в случае BeginForm() как можно указать URL-адрес? предположим, что url хранится в переменной и эта переменная должна использоваться для установки действия формы ... как это сделать с помощью BeginForm()? любая направляющая линия! – Mou

+1

Вы можете сделать это следующим образом: '

...
'. –

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