Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在MVC4中使用波斯语日期时间选择器_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 4_Datetimepicker - Fatal编程技术网

C# 在MVC4中使用波斯语日期时间选择器

C# 在MVC4中使用波斯语日期时间选择器,c#,asp.net,asp.net-mvc,asp.net-mvc-4,datetimepicker,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Datetimepicker,我试图在我的项目中使用波斯日期时间选择器。我使用的是MVC4 所以我找到了一个链接http://stackoverflow.com/questions/16248909/persian-calender-in-mvc-asp-net,我决定实现这一点 我在我的项目中添加了一些css和js文件,您可以在这里看到(我添加到我的布局页面): 我创建了一个视图create view,如下所示: namespace MvcApplication2.Models { public class DT

我试图在我的项目中使用
波斯日期时间选择器
。我使用的是MVC4

所以我找到了一个链接
http://stackoverflow.com/questions/16248909/persian-calender-in-mvc-asp-net
,我决定实现这一点

我在我的项目中添加了一些
css和js
文件,您可以在这里看到(我添加到我的布局页面):

我创建了一个视图
create view
,如下所示:

 namespace MvcApplication2.Models
{
    public class DTpicker
    {
         public string name { set;get;}
         public DateTime datetime { set; get; }
    }
}
@model MvcApplication2.Models.DTpicker

@{
    ViewBag.Title = "create";
}

<h2>create</h2>
<script type="text/javascript">
        var objCal1 = new AMIB.persianCalendar('pcal1'); </script>
@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>DTpicker</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.name)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.name)
            @Html.ValidationMessageFor(model => model.name)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.datetime)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.datetime, new { @id = "pcal1", @class = "pdate" })
            @Html.ValidationMessageFor(model => model.datetime)
        </div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}


@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
我将这部分代码添加到创建视图中,正如您在上面看到的:

  <script type="text/javascript">
            var objCal1 = new AMIB.persianCalendar('pcal1'); </script>

var objCal1=新的波斯阿米巴虫('pcal1');
那么问题出在哪里呢?当我运行我的应用程序时,datetimepicker不起作用。我看到使用浏览器的页面的视图源和我的datetime输入有如下语法:

   <div class="editor-label">
            <label for="datetime">datetime</label>
        </div>
        <div class="editor-field">
            <input class="text-box single-line" data-val="true" data-val-date="The field datetime must be a date." data-val-required="The datetime field is required." id="datetime" name="datetime" type="datetime" value="" />
            <span class="field-validation-valid" data-valmsg-for="datetime" data-valmsg-replace="true"></span>
        </div>

日期时间
正如您所知,id应该是
pcal1
,但是您可以看到id是
id=“datetime”
为什么

致以最良好的祝愿


任何想法都将受到欢迎

EditorFor
不支持传递HTML属性。所以你经过的物体什么也没做。(实际上,它所做的并不是您所期望的。它将使用这些值在
ViewData
中设置键,例如
ViewData[“id”]=“pcal1”
)id被设置为
datetime
,因为这是您正在为其创建编辑器的属性的名称

因此,您有两种选择:

  • 不要使用
    EditorFor
    ,而是使用类似
    TextBoxFor
    的东西。这将允许您传递要在输入上呈现的HTML属性:

    @Html.TextBoxFor(model => model.datetime, new { type="datetime", @id = "pcal1", @class = "pdate" })
    
  • 创建用于
    DateTime
    属性的编辑器模板:

    Views\Shared\EditorTemplates\DateTime.cshtml

    @{
        var htmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(ViewData["htmlAttributes"] ?? new {});
        htmlAttributes["type"] = "datetime";
        htmlAttributes["class"] = htmlAttributes["class"] == null
                                      ? "pdate"
                                      : "pdate " + htmlAttributes["class"];
    }
    
    @Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, htmlAttributes)
    
    那么在你看来,

    @Html.EditorFor(model => model.datetime, new { htmlAttributes = new { id = "pcal1" } })
    
    请注意,
    pdate
    类是由模板添加的,因此您不必手动传递它。我假设这就是JavaScript所附加的内容,所以您希望该类始终存在于
    DateTime
    属性的输入中。另外,请注意
    编辑器for
    调用的语法。您需要传递一个由
    id
    组成的匿名对象,而不是传递一个由
    htmlAttributes
    组成的匿名对象,该对象本身具有
    id
    。这也是因为,
    EditorFor
    只是在
    ViewData
    中设置值

  • @{
        var htmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(ViewData["htmlAttributes"] ?? new {});
        htmlAttributes["type"] = "datetime";
        htmlAttributes["class"] = htmlAttributes["class"] == null
                                      ? "pdate"
                                      : "pdate " + htmlAttributes["class"];
    }
    
    @Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, htmlAttributes)
    
    @Html.EditorFor(model => model.datetime, new { htmlAttributes = new { id = "pcal1" } })