Почему моя кнопка не отображается? - PullRequest
1 голос
/ 23 сентября 2010

У меня есть частичное представление, где я отображаю, если пользователь выбрал опцию, кнопку, которая позволяет пользователю автоматически генерировать значение для определенного поля. Пожалуйста, посмотрите на эту картинку, чтобы понять, что я имею в виду:

alt text

Это достигается с помощью следующей разметки в частичном представлении

<%= Html.LabelFor( model => model.IssueCode )%>
<br />
<% if ( Model.HasCodeGenerator ) { %>
    <%= Html.TextBoxFor( model => model.IssueCode, new { style = "width:120px;background-color:#eeeeee;border: solid 2px #dfdfdf", @readonly = "readonly" } )%>
    <% if (Model.ModelState == ModelStateEnum.Add) { %>
        <button id="codeGenerator" style="font-size: 0.7em;margin-right: 10px">Genera codice fascicolo</button>
    <% } %>
<% } else { %>
    <%= Html.TextBoxFor(model => model.IssueCode, new { style="width: 120px" })%>
<% } %>
<%= Html.ValidationMessageFor(model => model.IssueCode, "*")%>

Как видите, я всегда добавляю Html.ValidationMessageFor () в конец поля ввода и ValidationSummary aut в конец представления.

Когда пользователь отправляет форму, первый блок кода, выполняемый действием, выглядит следующим образом

if ( !ModelState.IsValid ) {
    //Invalid - redisplay form with errors
    return PartialView( "IssueCodeGenerator", model );
}

и вот результат, который я получаю во всех трех случаях

alt text

Почему код разметки для кнопки исчезает?

Спасибо за помощь!

1-е РЕДАКТИРОВАНИЕ :

После проверки текстовое поле IssueCode теряет атрибут readonly = "readonly". Это означает, что первое условие не соответствует, я думаю ....

2-е РЕДАКТИРОВАНИЕ:

Согласно комментарию Дарина я включаю

  1. Действие, показывающее частичное представление
  2. Выдержка из партиала, показывающая, что переменная ModelState хранится как скрытый элемент управления внутри формы
  3. Действие контроллера, вызываемое Частичным
  4. Код jQuery, передающий частичный

1 - это действие, которое показывает частичный

[HttpGet]
public ActionResult Create()
{
    IssueModel im = new IssueModel()
    {
        ModelState = ModelStateEnum.Add,
        FirmID = _firmManager.GetMyFirmID(),
        CreatedDate = DateTime.Now,
        LastUpdateDate = DateTime.Now,
        HasCodeGenerator = _optionManager.HasIssueCodeGenerator()
    };
    return PartialView("Issue", im);
}

2 - Извлечение частичного Issue.ascx

<% using (Html.BeginForm("SaveOrDelete", "Issue", FormMethod.Post, new { id = "crudForm" })) { %>
    <%= Html.HiddenFor(model => model.FirmID) %>
    <%= Html.HiddenFor(model => model.IssueID) %>
    <%= Html.HiddenFor(model => model.ModelState) %>

3 - это действие контроллера, вызываемое при отправке формы

[HttpPost]
public ActionResult SaveOrDelete( IssueModel model ) {
    if ( !ModelState.IsValid ) {
        //Invalid - redisplay form with errors
        return PartialView( "Issue", model );
    }

    try {
        Issue i = null;
        if ( model.ModelState == ModelStateEnum.Add )
            i = new Issue();
        else
            i = _manager.FindIssueByIssueID( model.IssueID );
        if ( model.ModelState != ModelStateEnum.Delete ) {
            _manager.BindIssueModel( i, model );
            if ( model.ModelState == ModelStateEnum.Add )
                i.FirmID = _contactManager.GetMyContact().FirmID;
            i.LastUpdateDate = DateTime.Now;
            _manager.SaveIssue( i );
        } else {
            _manager.DeleteIssue( i );
        }
        return PartialView( "ActionCompleted" );
    }
    catch ( Exception ex ) {
        return PartialView( "ActionError",
            new ActionErrorModel() { Message = ex.Message } );
    }
}

4 - это код jQuery, который отправляет форму

$("#crudForm").submit(function(event) {
    event.preventDefault();
    $("#crudForm").block();
    $.ajax({
        type: "post",
        dataType: "html",
        url: "/Issue/SaveOrDelete",
        sync: true,
        data: $("#crudForm").serialize(),
        success: function(response) {
            $("#crudForm").parent().html('').html(response);
            $("#crudForm").unblock();
        },
        error: function(response) {
            $("#crudForm").unblock();
        }
    });
});

Надеюсь, что это поможет найти проблему. Спасибо.

1 Ответ

0 голосов
/ 23 сентября 2010

Потому что Model.ModelState == ModelStateEnum.Add превращается в ложь?

MVC не выключит вашу кнопку html ...


Даже не видя форму, совершенно ясно, что Дарин прав, а ваше перечисление Modelstate устанавливается в ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...