HTML TextBox для всегда показывает мой DateTime? значение со временем, даже если я переопределить в asp.net MVC 2. почему? - PullRequest
1 голос
/ 10 июня 2011

У меня есть вид редактирования объекта.В этом представлении несколько DateTime?свойства, которые используют:

model.MyDateTime)%>

У меня есть шаблон редактора с именем DateTime, который строго типизирован для DateTime?тип.Представление объявляется следующим образом:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DateTime?>" %>

<% if( Model.HasValue ) { %>
    <%= Html.TextBoxFor( x => Model, Model.Value.ToShortDateString() ) %>
<% } else { %>
    <%= Html.TextBoxFor(x => Model) %>
<% } %>

Часть времени всегда отображается независимо от того, что я делаю.Я знаю, что шаблон отображения отображается.Я добавил статический текст для вывода if, а также для вывода else, и первый всегда показывает.Невероятно странная вещь, которую я могу сделать:

<%= Html.Encode(Model.Value.ToShortDateString())   %>

И часть времени не отображается.Я довольно озадачен.Ниже приведены действия GET & POST, которые я использую:

   public ActionResult EditAssociate(int? Oid)
    {
        if (!Oid.HasValue)
            return RedirectToAction("SelectReviewYearAndAssociate");
        MpaNonExemptData mpaNonExemptRecord = repository.getNonExemptDataByOid(Oid.Value);
        return View(mpaNonExemptRecord);
    }

[HttpPost]
public ActionResult EditAssociate(MpaNonExemptData associate)
{
    repository.updateNonExemptDataByOid(associate);
    return View(associate);
}

Как видите, это действительно просто.Есть мысли?

Я посмотрел следующие вопросы, но не нашел ответа:

Объект TextBoxFor Date всегда показывает элемент времени

TextBoxFor Helper сохраняет предыдущее значение, даже если значение модели пусто

Ответы [ 2 ]

3 голосов
/ 10 июня 2011

Вы должны использовать помощник TextBox внутри шаблона редактора, так как в отличие от TextBoxFor он позволяет вам указать значение (второй аргумент помощника TextBoxFor не делает то, что вы думаете => это просто используется для передачи атрибутов html в сгенерированное поле, а не для установки значения):

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DateTime?>" %>

<% if(Model.HasValue) { %>
    <%= Html.TextBox("", Model.Value.ToShortDateString()) %>
<% } else { %>
    <%= Html.TextBox("") %>
<% } %>

Кроме того, если это шаблон редактора (который выглядит так), вам нужно включить его в Html.EditorFor(x => x.MyDateTime) вместо Html.DisplayFor(x => x.MyDateTime), как показано в вашем примере.

0 голосов
/ 06 января 2014
@Html.TextBoxFor(m => m.YourDateField, 
new { @onkeydown = "return false;", @class = "yourCssClass", 
@Value = (Model.YourDateField.HasValue) ? 
Model.YourDateField.Value.ToShortDateString() : ""})
...