我有以下问题:
我想知道是否可以修改默认的html辅助方法,例如Html.BeginForm()方法。
我知道我可以编写一个自定义辅助方法,我可以添加一些东西,但其中一些有很多重载函数。
然后我唯一需要的是,你可以在“渲染元素之后”添加一些自定义html字符串
e.g:
@using(Html.BeginForm("setDate", "DateController", new { DateId = Model.Date.Identifier }, FormMethod.Post, new { id = "setDateForm" })) {
@* some input here... *@
}
之后
<form></form>
我想渲染验证脚本,或其他东西,让我们说jQuery验证器:
<script>$('#setDateForm').validate();</script>
因为我不想一遍又一遍地这样做(也许我可以忘记它一次......)修改默认的Html助手会很好。
如果不可能,我可能不得不为EndForm帮助器编写自己的BeginForm或包装器:/
答案 0 :(得分:2)
作为一个非常基本的起点,你可以使用这样的东西:
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);
}
}
}
}
您需要在视图中添加命名空间或将其添加到Views文件夹中的web.config文件中。之后,您可以这样使用它:
@using (Html.CustomBeginForm("<p>test</p>")) {
// Additional markup here
}
这对我有用,但您肯定需要根据自己的需要对其进行自定义,尤其是您可能希望将其他参数传递给Html.BeginForm()
。
答案 1 :(得分:1)
您可以编写自己的Extension方法来执行此操作。从Codeplex获取BeginForm方法的代码。(MVC3源代码是open source :))并对其进行相关更新以呈现您想要的表单。
代码位于FormExtensions.cs
项目下的System.Web.MVC
课程中。查找从BeginForm Overrides调用的FormHelper方法。
答案 2 :(得分:0)
这是不可能的。你必须自己做帮助。