C# 使用razor修改ASP.NET MVC3中的Html帮助程序

C# 使用razor修改ASP.NET MVC3中的Html帮助程序,c#,asp.net-mvc-3,razor,html-helper,C#,Asp.net Mvc 3,Razor,Html Helper,我有以下问题: 我想知道是否可以修改默认的html帮助程序方法,例如html.BeginForm()方法 我知道我可以编写一个自定义的helper方法,在这里我可以添加一些东西,但是其中一些有很多重载函数 然后,我唯一需要的是,您可以在呈现元素之后添加一些自定义html字符串 e、 g: 那之后呢 <form></form> 我想呈现一个验证脚本或其他东西,比如jQuery validator: <script>$('#setDateForm').val

我有以下问题:

我想知道是否可以修改默认的html帮助程序方法,例如html.BeginForm()方法

我知道我可以编写一个自定义的helper方法,在这里我可以添加一些东西,但是其中一些有很多重载函数

然后,我唯一需要的是,您可以在呈现元素之后添加一些自定义html字符串

e、 g:

那之后呢

<form></form>

我想呈现一个验证脚本或其他东西,比如jQuery validator:

<script>$('#setDateForm').validate();</script>
$('#setDateForm').validate();
因为我不想一遍又一遍地这样做(也许我可以忘记一次…),所以最好修改默认的Html帮助程序


如果不可能,我可能只需要为EndForm helper编写我自己的BeginForm或包装器://

这是不可能的。您必须自己编写助手。

您可以编写自己的扩展方法来完成此操作。从Codeplex获取BeginForm方法的代码(MVC3源代码为:),并对其进行相关更新,以呈现所需的表单


代码可在
System.Web.MVC
项目下的
FormExtensions.cs
类中找到。查找正在从BeginForm覆盖调用的FormHelper方法。

作为一个非常基本的起点,您可以使用如下内容:

namespace YourProject.Helpers
{
    public static class HtmlHelperExtensions
    {
        public static IDisposable CustomBeginForm(this HtmlHelper helper, string html)
        {
            return new MvcFormExtension(helper, html);
        }

        private class MvcFormExtension : IDisposable
        {
            private HtmlHelper helper;
            private MvcForm form;
            private string html;

            public MvcFormExtension(HtmlHelper helper, string html)
            {
                this.helper = helper;
                this.form = this.helper.BeginForm();
                this.html = html;
            }

            public void Dispose()
            {
                form.EndForm();
                helper.ViewContext.Writer.Write(this.html);
            }
        }
    }
}
您需要在视图中添加名称空间,或者将其添加到视图文件夹中的web.config文件中。之后,您可以这样使用它:

@using (Html.CustomBeginForm("<p>test</p>")) {
    // Additional markup here
}
@使用(Html.CustomBeginForm(test

){ //此处有附加标记 }

这对我来说很有用,但您肯定需要定制它以满足您的需要,特别是当您可能希望将其他参数传递到
Html.BeginForm()

谢谢,这很有帮助。它仍然是一种包装器,但它比我的尝试要好得多:)谢谢你提供的信息,我接受了John H的回答,因为他费心发布了一个示例,但我没有想到.NET本身可能是开源的,因此浏览那里的源代码也很有帮助:)没问题。很高兴你能弄明白。约翰应该得到+15,因为他发布了一些代码:)
@using (Html.CustomBeginForm("<p>test</p>")) {
    // Additional markup here
}