2015-04-21 5 views
0

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

<div id="divTypePage" style="display:none" class="admin"> 
@using (Html.BeginForm("Type", "Inventory", FormMethod.Post, new { id = "typeForm" })) 
{ 
    <h4>Item Type Maintenance</h4> 
    <table class="table_body"> 
     <tr> 
      <td> 
       <b style="color:red">*</b>Find Item Type or Enter New Code: 
      </td> 
      <td> 
       <input id="types" style="text-transform:uppercase" class="typeModel" /> 
        @Html.HiddenFor(x=>x.ItemTypeModel.ItemTypeCode, new {@id = "txtTypeCode"}) 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <b style="color:red">*</b>@Html.DisplayNameFor(x=>x.ItemTypeModel.ItemTypeDescription) 
      </td> 
      <td> 
       @Html.TextBoxFor(x => x.ItemTypeModel.ItemTypeDescription, new { @id = "txtDesc", style="text-transform:uppercase", @class="typeModel" }) 
       @Html.ValidationMessageFor(x=>x.ItemTypeModel.ItemTypeDescription) 
      </td> 
     </tr> 
     <tr> 
      <td> 
       @Html.DisplayNameFor(x=>x.ItemTypeModel.ItemTypePriority) 
      </td> 
      <td> 
       @Html.TextBoxFor(x => x.ItemTypeModel.ItemTypePriority, new { @id = "txtPrior", @maxLength = "1", style = "width: 50px", @class="typeModel" }) 
       @Html.ValidationMessageFor(x=>x.ItemTypeModel.ItemTypePriority) 
      </td> 
     </tr> 
    </table> 
} 
    </div> 
     <div id="divRolePage" style="display:none" class="admin"> 
@using (Html.BeginForm("Role", "Inventory", FormMethod.Post, new { @id = "roleForm" })) 
{ 
    <h4>Role Maintenance</h4> 
    <table class="table_body"> 
     <tr> 
      <td> 
       <b style="color:red">*</b>Find Role or Enter New: 
      </td> 
      <td> 
       <input id="roles" class="roleModel" style="text-transform:uppercase" /> 
       @Html.HiddenFor(x=>x.RoleModel.Role, new { @id = "txtRole"}) 
      </td> 
     </tr> 
     <tr> 
      <td> 
       <b style="color:red">*</b>@Html.DisplayNameFor(x=>x.RoleModel.Description) 
      </td> 
      <td> 
       @Html.TextBoxFor(x=>x.RoleModel.Description, new { @id = "txtRoleDesc", style = "text-transform:uppercase", @class = "roleModel"}) 
      </td> 
     </tr> 
     <tr> 
      <td> 
       @Html.DisplayNameFor(x=>x.RoleModel.Admin) 
      </td> 
      <td> 
       @Html.CheckBoxFor(x=>x.RoleModel.Admin, new { @id = "chkAdmin"}) 
      </td> 
     </tr> 
     <tr> 
      <td> 
       @Html.DisplayNameFor(x=>x.RoleModel.Trans) 
      </td> 
      <td> 
       @Html.CheckBoxFor(x=>x.RoleModel.Trans, new { @id = "chkTrans"}) 
      </td> 
     </tr> 
     <tr> 
      <td> 
       @Html.DisplayNameFor(x=>x.RoleModel.Reports) 
      </td> 
      <td> 
       @Html.CheckBoxFor(x=>x.RoleModel.Reports, new { @id = "chkReports"}) 
      </td> 
     </tr> 
    </table> 
    } 
    </div> 

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

function OpenAdminPage(page) { 
    var type = page; 
    switch (page) { 
     case "type": 
      $("#divTypePage").dialog("open"); 
      ParseForm("#typeForm"); 
      break; 
     case "user": 
      ClearValues(); 
      $("#divUserPage").dialog("open"); 
      ParseForm("#userForm"); 
      break; 
     case "role": 
      ClearValues(); 
      $("#divRolePage").dialog("open"); 
      ParseForm("#roleForm"); 
      break; 
    } 
    return false; 
} 

А функция заключается в следующем:

function ParseForm(selector) { 
var form = $(selector) 
    .removeData("Validator") 
    .removeData("unobtrusiveValidation"); 
$.validator.unobtrusive.parse(form); 
} 

Однако только одна форма будет отображать ошибки, другие два дают мне это:

0x800a03f6 - JavaScript runtime error: Invalid character 

Это в jquery-1.11.2 в функции jQuery.parseJSON. Я просто делаю это неправильно или это невозможно сделать так?

+0

Вы можете разорвать формы больше и посмотреть, если это все-таки происходит? Попробуйте ли вы их вывести из частичных представлений, чтобы устранить неполадки? Вводя их в собственные частичные взгляды? – jackncoke

+0

Что делать, если вы используете 'body' в качестве селектора (только для целей отладки). Найдет ли он и привяжет к другим формам? _unobtrusive.parse() _ будет искать элементы формы с атрибутами 'data-val = true', присутствуют ли они во всех элементах? – Mackan

+0

Можете ли вы разобрать по классу? Если я установлю класс для каждого набора входов, будет ли это работать? –

ответ

-2

используя JSON.parse (данные). он сериализуется корректно. и еще одно разъяснение. если вы размещаете свое приложение в iis. выполните следующие действия:

откройте IIS и посмотрите на свои типы MIME. Проверьте, есть ли у вас один вызванный .json. Если нет, просто добавьте один вызванный .json и установите его в application/json.

+0

Полностью отключен от темы –

1

Я не вижу никакого кода проверки MVC, видимого в примере, который вы отправили для roleForm. Немного тонкий предположение, но я обосновывая это следующим образом:

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

Данные аннотаций и сообщений о проверке создадут «отсутствующие» атрибуты (ну, на данный момент их не хватает). Я уверен, что вы знаете, как они работают, поскольку вы получили одну рабочую форму проверки, но для справки:

В модели:

public class MyModel { 
    [Required(ErrorMessage = "What is my name?")] 
    public string MyName { get; set; } 
} 

По мнению:

@Html.TextBoxFor(x => x.MyName) 
@Html.ValidationMessageFor(x => x.MyName) 

Почему это будет бросить ошибку javascript немного неясно. Но я надеюсь, что это все равно исправит.

Edit - A good reference (mainly for MVC3, but it applies)

+0

Да, это было до того, как я установил необходимые atts. Во всяком случае, он все еще не работает, и я получаю ту же ошибку JS. Это сводит меня с ума! Поэтому я удалил проверку JS - if (! $ ("# RoleForm"). Valid()) - и просто зафиксировал ошибки в контроллере. Боль, но нужно было сделать. –

Смежные вопросы