C# 将jQuery添加到MVC3中具有相同模型的表单

C# 将jQuery添加到MVC3中具有相同模型的表单,c#,jquery,asp.net-mvc-3,C#,Jquery,Asp.net Mvc 3,我试图在同一个视图上有两个具有类似功能的提交表单,其中每个表单都强类型化到同一个模型。然后,我试图在两个表单上的相同输入中添加一个日期选择器,但我不确定如何做到这一点。这是我的密码: @using (@Ajax.BeginForm(... new { id = "editScheduleForm" })) { <div class="editor-label"> @Html.LabelFor(model =>

我试图在同一个视图上有两个具有类似功能的提交表单,其中每个表单都强类型化到同一个模型。然后,我试图在两个表单上的相同输入中添加一个日期选择器,但我不确定如何做到这一点。这是我的密码:

@using (@Ajax.BeginForm(...
                        new { id = "editScheduleForm" }))
{
    <div class="editor-label">
        @Html.LabelFor(model => model.StartTime)
    </div>
    <div class="editor-field">
        <input 
        @Html.EditorFor(model => model.StartTime)
        @Html.ValidationMessageFor(model => model.StartTime)
    </div>
}
但毫不奇怪,它只对其中一个输入起作用。我一直在尝试使用添加到两个Ajax表单声明(例如editScheduleForm和addScheduleForm)中的HTML id,但不确定如何做到这一点。有什么建议吗

解决方案: 正如scottm所建议的,我查阅了有关使用自定义编辑器模板的文档。我读了这篇文章,详细介绍了我不知道存在的功能:


在这里,您可以指定一个模板,然后为htmlFieldName添加一个参数,该参数是专门为避免我遇到的问题而设计的。

您可以向编辑器模板中的输入添加一个类。然后可以使用该类作为jQuery选择器

~/Views/Shared/EditorTemplates
下添加名为
DateTime.cshtml
的文件,并添加以下内容:

@model DateTime
@Html.TextBox("", (Model.HasValue ? Model.Value.ToShortDateString() : string.Empty), new { @class = "date" })
然后将这个jQuery添加到页面中

$(function () {
    $(".date").datepicker();
});

可以将类添加到编辑器模板中的输入中。然后可以使用该类作为jQuery选择器

~/Views/Shared/EditorTemplates
下添加名为
DateTime.cshtml
的文件,并添加以下内容:

@model DateTime
@Html.TextBox("", (Model.HasValue ? Model.Value.ToShortDateString() : string.Empty), new { @class = "date" })
然后将这个jQuery添加到页面中

$(function () {
    $(".date").datepicker();
});

切勿依赖页面上的多个ID正常工作。事实上,尽管博客中的大多数示例都是这样做的,但您几乎不应该将ID用作jquery选择器

就像@scottm说的。您应该使用类来标记您想要被小部件化的项目

下面是一段过于简单的代码,您可以声明性地创建jq ui小部件:

$(function() {

  $('[data-usewidget]').each(function() {
    var $this = $(this), widget = $this.data('usewidget');
    $.fn[widget] && $this[widget]();
  });

});
然后在你的html中

<input name=startTime data-usewidget=datepicker />

切勿依赖页面上的多个ID正常工作。事实上,尽管博客中的大多数示例都是这样做的,但您几乎不应该将ID用作jquery选择器

就像@scottm说的。您应该使用类来标记您想要被小部件化的项目

下面是一段过于简单的代码,您可以声明性地创建jq ui小部件:

$(function() {

  $('[data-usewidget]').each(function() {
    var $this = $(this), widget = $this.data('usewidget');
    $.fn[widget] && $this[widget]();
  });

});
然后在你的html中

<input name=startTime data-usewidget=datepicker />


如果这能起作用那就太好了,但我认为我无法从
@Html.BeginForm
手动设置该类。输出的HTML已经有一个类,如下所示:
我尝试使用您的添加,但MVC忽略了新代码。@c0nn您可以通过在
~/Views/Shared/EditorTemplates
中添加.cshtml文件来进一步定义编辑器模板的呈现方式。这里有一个例子,它完全符合您的要求:如果这样做有效,那就太好了,但我认为我无法从
@Html.BeginForm
手动设置该类。输出的HTML已经有一个类,如下所示:
我尝试使用您的添加,但MVC忽略了新代码。@c0nn您可以通过在
~/Views/Shared/EditorTemplates
中添加.cshtml文件来进一步定义编辑器模板的呈现方式。下面是一个例子,它完全符合您的要求: