2013-06-19 5 views
0

Могу ли я не иметь полей в моем бритве?Не обязательные поля в MVC4

У меня есть вид внизу, в котором я хочу, чтобы скрытое поле не обязательное поле. В настоящее время он рассматривается как обязательный, а мое состояние модели ложно.

пожалуйста, согласитесь?

@using P.M.O 
@model O 

@using (Html.BeginForm()) { 
@Html.ValidationSummary(true) 
<fieldset> 
    <legend>Create a New O</legend> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.C) 
     @Html.TextBoxFor(model => model.C, new { @class = "txt"}) 
     @Html.ValidationMessageFor(model => model.Caption) 
    </div> <br /> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.N) 
     @Html.TextBoxFor(model => model.N, new { @class = "txt"}) 
     @Html.ValidationMessageFor(model => model.N) 
    </div> <br /> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.D) 
     @Html.TextBoxFor(model => model.D, new { @class = "txt"}) 
     @Html.ValidationMessageFor(model => model.D) 
    </div> 
    <br /> 
     @Html.HiddenFor(model=> model.P.Cr) 
     <input type="submit" value="Create" /> 
</fieldset> 
} 

Модель:

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.ComponentModel.DataAnnotations.Schema; 

namespace P.M.O 
{ 
[Serializable] 
public partial class O 
{ 
    /*** Construtor(s) ***/ 
    public O() 
    { 

    } 

    public O(P obj) 
     : this() 
    { 
     P= obj; 
    } 


    /*** Public Members ***/ 
    [Key, Display(Name = "Id")] 
    public int PartyId { get; set; } 


    /* IEntity */ 
    public string C{ get; set; } 

    public string N{ get; set; } 

    public string D{ get; set; } 


    /* IAuditable */ 
    [NotMapped, ScaffoldColumn(false)] 
    public System.DateTimeOffset Created 
    { 
     get { return P.C; } 
     set { P.C= value; } 
    } 

    /* Navigation Properties */ 
    /// <summary> 
    /// Foreign key to Party: PartyId 
    /// Organization is subtype of Party 
    /// </summary> 
    public virtual P P{ get; set; } 

} 
} 
+0

Отправьте свою модель, пожалуйста, пожалуйста. –

+0

опубликовал класс модели..thanku – mmssaann

+0

Я предполагаю, что поле 'model.Party.Created' является полем' DateTime'. Если вы хотите, чтобы он не требовался, вы должны объявить его как поле с нулевым значением 'DateTime':' public DateTime? Создано {get; задавать; } ' –

ответ

0

Создайте дочерние или родительские объекты, используя Custom Binding. Модель связующего решена.

3

Вы должны определить свою Created собственность как обнуляемый DateTimeOffset:

/* IAuditable */ 
[NotMapped, ScaffoldColumn(false)] 
public System.DateTimeOffset? Created 
{ 
    get { return Party.Created; } 
    set { Party.Created = value; } 
} 

редактирование: и размещение для того, что Party свойства может быть null:

public System.DateTimeOffset? Created 
{ 
    get 
    { 
     return Party == null ? null : Party.Created; 
    } 
    set 
    { 
     if (Party == null) 
     { 
      return; 
     } 
     else 
     { 
      Party.Created = value; 
     } 
    } 
} 
+0

Это фактически обязательное поле в базе данных. У нас есть ограничение на его дефолт, он также обрабатывается на фабричных классах. Вот моя проблема: Организация - это ребенок партии. И некоторые из таких полей, как «Создано», передаются от родителя (см. Выше). Когда я создаю новые организации, у меня не будет связанной с ней стороны, поэтому моя модель Organization не работает с нулевой ссылкой в ​​«Свойстве». Чтобы обработать это, я добавил, что скрытое поле в моем представлении теперь рассматривается как обязательное, как его решить? – mmssaann

+0

Хорошо, что ваша собственность должна проверить, нет ли 'Party'' null. Я добавил альтернативную версию, которая выполняет эту проверку. Не могли бы вы увидеть, работает ли это? –

+0

получение ошибки преобразования между и DateTimeOffset в get property :( – mmssaann

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