Привязка модели тормозит после добавления атрибутов html5 - PullRequest
0 голосов
/ 13 августа 2011

У меня есть вид, и он использует вспомогательный метод TextBoxFor для редактирования модели. Как это:

<div class="editor-field">
                <%:Html.TextBoxFor(model => model.Property, new { @class = "mybox" })%>
                <%: Html.ValidationMessageFor(model => model.Property)%>
</div>

Итак, Modelbinder работает отлично, и я могу редактировать и сохранять свою модель.

Когда я добавляю html5 атрибуты 'type' и 'step', как это

<div class="editor-field">
                <%:Html.TextBoxFor(model => model.Property, new { @class = "mybox",@type = "number", @step = "1" })%>
                <%: Html.ValidationMessageFor(model => model.Property)%>
</div>

Я вижу красивое числовое управление вместо текстового поля, но привязка модели тормозит, и всякий раз, когда я меняю свое свойство, я получаю 0 в моей модели. Свойство при отправке.

Что не так с моим кодом?

Это моя простая модель

public class Model
    {

        [DisplayName("Property")]
        public int Property
        {
            get;
            set;
        }           
    }

Натан, мое объяснение проблемы здесь не точное. Здесь Ajax Form разрывается после добавления атрибутов html5 в Chrome / Safari - лучшее описание и обходной путь.

1 Ответ

1 голос
/ 13 августа 2011

Попробуйте:

http://deanhume.com/Home/BlogPost/asp-net-mvc-html5-toolkit/29

На основании вашего кода это работает для меня:

Контроллер:

public class IndexController : Controller
{

    public ActionResult Index()
    {
        return View();
    }

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Index(Model model)
    {
        return Content(model.Property.ToString());
    }

}

Модель:

public class Model
{
    [DisplayName( "Property" )]
    public int Property
    {
        get;
        set;
    }
}

Вид:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<BindTest.Models.Model>" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>Index</title>
    </head>
    <body>
    <%using( Html.BeginForm( "index", "index" ) ){ %>
        <div class="editor-field">
            <%=Html.TextBoxFor(model => model.Property, new {@class = "mybox", @type = "number", @step = "1"})%>
            <%=Html.ValidationMessageFor(model => model.Property)%>
        </div>

        <button type="submit" value="click Me">Click Me</button>

    <% } %>
    </body>
</html>

Когда я нажимаю кнопку «Отправить», номер, выбранный в моем элементе управления числовым вводом, принимается контроллером и выводится в браузер.

Нам понадобится больше кода, чтобы быть более полезным.

...