Asp.net mvc 4 MVC4中的非必填字段

Asp.net mvc 4 MVC4中的非必填字段,asp.net-mvc-4,razor,Asp.net Mvc 4,Razor,我可以在razor视图中没有必填字段吗 我有下面的视图,我希望隐藏字段不是必填字段。 目前它被视为强制性的,并且我的模型状态为false 请再见 @using P.M.O @model O @using (Html.BeginForm()) { @Html.ValidationSummary(true) <fieldset> <legend>Create a New O</legend> <div class="editor-labe

我可以在razor视图中没有必填字段吗

我有下面的视图,我希望隐藏字段不是必填字段。 目前它被视为强制性的,并且我的模型状态为false

请再见

@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>
}  
使用P.M.O @模型O @使用(Html.BeginForm()){ @Html.ValidationSummary(true) 创建一个新的O @LabelFor(model=>model.C) @TextBoxFor(model=>model.C,新的{@class=“txt”}) @Html.ValidationMessageFor(model=>model.Caption)
@LabelFor(model=>model.N) @TextBoxFor(model=>model.N,新的{@class=“txt”}) @Html.ValidationMessageFor(model=>model.N)
@LabelFor(model=>model.D) @TextBoxFor(model=>model.D,新的{@class=“txt”}) @Html.ValidationMessageFor(model=>model.D)
@Html.HiddenFor(model=>model.P.Cr) } 型号:

 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; }

}
}
使用系统;
使用System.Collections.Generic;
使用System.ComponentModel.DataAnnotations;
使用System.ComponentModel.DataAnnotations.Schema;
名称空间P.M.O
{
[可序列化]
公共部分O类
{
/***建造商(s)***/
公共事务主任()
{
}
公共事务主任(P obj)
:此()
{
P=obj;
}
/***公众成员***/
[键,显示(Name=“Id”)]
公共int PartyId{get;set;}
/*丰满*/
公共字符串C{get;set;}
公共字符串N{get;set;}
公共字符串D{get;set;}
/*可审计*/
[未映射,脚手架柱(假)]
已创建公共System.DateTimeOffset
{
获取{return P.C;}
设置{P.C=value;}
}
/*导航属性*/
/// 
///第三方外键:PartyId
///组织是党的亚类型
/// 
公共虚拟P{get;set;}
}
}

您应该将创建的
属性定义为可为空的
日期时间偏移量

/* IAuditable */
[NotMapped, ScaffoldColumn(false)]
public System.DateTimeOffset? Created
{
    get { return Party.Created; }
    set { Party.Created = value; }
}
编辑:并考虑到
参与方
属性可能为

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

您应该将您的
创建的
属性定义为可为空的
日期时间偏移量

/* IAuditable */
[NotMapped, ScaffoldColumn(false)]
public System.DateTimeOffset? Created
{
    get { return Party.Created; }
    set { Party.Created = value; }
}
编辑:并考虑到
参与方
属性可能为

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

使用自定义模型绑定器创建子对象或父对象。模型绑定器解决了这个问题。

使用自定义模型绑定器创建子对象或父对象。模型绑定器解决了这个问题。

请也发布您的模型。发布模型类..thankuI假设
model.Party.Created
字段是
DateTime
字段。如果不希望它是必需的,则应将其声明为可为空的
DateTime
字段:
public DateTime?已创建{get;set;}
也请发布您的模型。已发布模型类..谢谢假定
model.Party.Created
字段是
DateTime
字段。如果不希望它是必需的,则应将其声明为可为空的
DateTime
字段:
public DateTime?创建{get;set;}
这实际上是数据库中的必填字段。我们对它有一个默认的约束,我们也在工厂类中处理它。有些字段如Created是从父级引用的(请参见上面的模型)。当我创建新组织时,我将没有其关联方,因此我的组织模型在Created属性处失败,引用为空。为了处理这个问题,我在视图中添加了一个隐藏字段,现在它被视为强制性字段,如何解决这个问题?那么,您的属性需要检查
Party
是否为
null
。我添加了一个替代版本来执行此检查。是否可以查看它是否有效?在get属性中获取和DateTimeOffset之间的转换错误:(上述属性的另一个问题是-im获取以下异常:PartyBiz.dll中发生类型为“System.StackOverflowException”的未处理异常,在检查方获取此异常==Null这实际上是数据库中的一个必填字段。我们对它有一个默认约束,我们也在工厂类中处理它。他re我的问题是组织是一方的子公司。一些像创建的字段是从父公司引用的(请参见上面的模型)。当我创建新组织时,我将不会有其关联方,因此我的组织模型在Created属性处失败,引用为null。为了处理此问题,我在视图中添加了一个隐藏字段,现在它被视为强制性字段,如何解决此问题?嗯,您的属性需要检查
是否为
null
。我已经添加了一个进行此检查的替代版本。您能看看它是否有效吗?在get属性中获取和DateTimeOffset之间的转换错误:(上述属性的另一个问题是-im获取以下异常:PartyBiz.dll中发生类型为“System.StackOverflowException”的未处理异常,在检查方获取此异常==null