Связыватель модели ASP.NET MVC неправильно анализирует ISO DateTime - PullRequest
2 голосов
/ 09 августа 2010

Я пытался отправить форму на мой контроллер:

Id=0&ReportDate=2010-08-09T00%3A00%3A00&SampleText=Save

Это отправленное сообщение XHR, мой контроллер выбирает все свойства, кроме ReportDate, вместо этого устанавливая его в .NETэпоха DateTime.Есть идеи?

Редактировать: Если я установлю другую переменную, ReportDateString, отправлю строку в контроллер и сделаю DateTime.Parse(), она работает нормально.Однако я действительно хотел бы иметь возможность привязывать DateTime напрямую, так как это выглядит хакерским.

Редактировать 2: Вот мой код контроллера:

public void CreateTest(MyObject myObject) {
    myObjectRepository.Update(rootObject);          
}

И мой объект:

public class MyObject {
    public int Id { get; set; }
    public string SampleText{ get; set; }
    public DateTime ReportDate { get; set; }
}

Если я установлю отладку, я могу видеть, что механизм связывания модели успешно связывает все свойства моего поста, кроме DateTime, который он устанавливает на дату эпохи.

Редактировать 3: Форма:

<form id="testform" method="post">
<input type="hidden" name="Id" value="0" />
<input type="hidden" name="ReportDate" value="2010-08-09T00-00-00" />
<input type="text" name="SampleText" value="Test"/>
<button id="saveButton">Save</button>
</form>

Javascript:

$('#saveButton')live('click', function(e) {
 $.post('CreateTest', $('#testform').serialize())
});

Ответы [ 2 ]

1 голос
/ 10 августа 2010

Это прекрасно работает для меня:

 public void Test2(DateTime ReportDate, string SampleText, int Id)

с URL:

/Home/Test2?Id=0&ReportDate=2010-08-09T00:00:00&SampleText=Save

Затем ReportDate наступает {09.08.2010 00:00:00}, когда я перерываюкод ...

Изменить - Дополнительный код:

<% using (Html.BeginForm())
   { %>
    <%= Html.Hidden("ReportDate", "2010-08-09T00:00:00") %>
    <%= Html.TextBox("SampleText", "Save") %>
    <%= Html.TextBox("Id", "1") %>
    <input type="submit" />
<%} %>

Я также попробовал следующее с тем же результатом:

<form id="testForm">
    <%= Html.Hidden("ReportDate", "2010-08-09T00:00:00") %>
    <%= Html.TextBox("SampleText", "Save") %>
    <%= Html.TextBox("Id", "1") %>
    <a href="#" id="submitform">Submit!</a>
</form>

<script type="text/javascript">
    $("#submitform").click(function () {
        $.post("/Home/Test2", $("#testForm").serialize());
    });

</script>

И это:

[HttpPost]
public ActionResult Test2(MyObject myObject) {
    return View();
}

Где MyObject - это копия / вставка из вашего исходного вопроса ..

0 голосов
/ 15 ноября 2015

Это не так сложно, вам нужно добавить культурные настройки в веб-конфигурацию. Это должно решить вашу проблему. В моем случае это TR, вы можете попробовать добавить свой

<system.web>
    <customErrors mode="Off" />
    **<globalization enableClientBasedCulture="true" culture="tr-TR" uiCulture="tr-TR" />**
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" />
    </authentication>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...