Подтвердить частичное представление сложной модели?

У меня есть приложение расписания, в котором я загружаю PartialView с помощью jQuery. Все работает нормально, но я понятия не имею, как проверить ввод. Я пытался сделать это аналогично тому, как делал это раньше, но это не сработало:

    <% for (int i = 0; i < Model.Tasks.Count; i++)
       {
           var task = Model.Tasks[i];
    %>
    <tr class="taskrow">
        <td class="customer">
            <%: task.Customer.CustomerName %>
        </td>
        <td class="task">
            <%: task.TaskName %>
        </td>
        <% for (int j = 0; j < task.TimeSegmentList.Count; j++)
           { %>
        <td>
            <%: Html.TextBoxFor(model => model.Tasks[i].TimeSegmentList[j].Hours, new { @class = "hourInput" })%>
            <%: Html.ValidationMessageFor(model => model.Tasks[i].TimeSegmentList[j].Hours)%>
        </td>
        <% } %>
    </tr>
    <% } %>

Хотя этот PartialView загружается с использованием jQuery, он также содержит кнопку отправки, которая отправляется методу действия.

Поскольку я использую Entity Framework, я прочитал, что мне нужно украсить модель DataAnnotations следующим образом:

[MetadataType(typeof(TimeSegmentMetaData))]
public partial class TimeSegment
{

    public class TimeSegmentMetaData
    {
        [Range(0,24,ErrorMessage = "Must be between 0 and 24 hours")]
        public object Hours { get; set; }
    }
}

Поэтому я хочу убедиться, что здесь для часов введено число от 0 до 24. (Я также хотел бы убедиться, что это int, но я еще не дошел до этого, сначала нужно выполнить проверку)

Так что это не работает, что я делаю не так? Разве это невозможно сделать, потому что у меня есть сложная модель с циклом for в PartialView?

Я также думал о том, чтобы попытаться найти какую-то строгую проверку jQuery (я видел, что для этого существуют плагины jQuery), но я не могу понять, как использовать jQuery в PartialView. Потому что как я могу запустить jQuery, когда функция document.ready находится в основном (родительском) представлении? Мне это все равно понадобится, потому что позже я хочу иметь возможность делать что-то, если пользователь выбирает поле ввода ...

PS: Я все еще новичок как в jQuery, так и в MVC, поэтому я бы очень признателен за четкие указатели на то, что я делаю неправильно ... Спасибо!


person Anders    schedule 19.12.2010    source источник


Ответы (1)


Я бы начал с изменения типа на Int. Кроме того, вы можете использовать foreach вместо цикла For

foreach (Task task in task.TimeSegmentList)
person leem    schedule 19.12.2010
comment
Ну, тип - это объект только потому, что он в метаданных для Entity Framework, в реальной модели это int. И я не могу использовать foreach, потому что привязка в представлении с textboxfor требует цикла for. - person Anders; 20.12.2010