如何生成&从数据库ASP.Net MVC渲染URL

时间:2013-10-01 13:45:40

标签: asp.net-mvc-3

假设我将url存储在数据库中,现在我希望我的表单操作属性或ActionLink url应指向存储在我的数据库中的url。当我们使用ActionLink时,我们指定控制器&当我们使用@ Html.BeginForm()时,动作方法名称和方法相同,然后我们还指定controller&动作方法名称。那么我们如何定制ActionLink&的代码呢?因此,BeginForm()应始终指向存储在数据库中的url。请指导我的概念。感谢

2 个答案:

答案 0 :(得分:5)

如果要使用存储在数据库中的网址,为什么要使用ActionLink或BeginForm帮助程序?

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

看起来很好。这些帮助程序旨在通过提供控制器和操作名称来组成URL。

答案 1 :(得分: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;
        }