Asp.net mvc 4 我如何判断';当我回发我的观点时发生了什么?

Asp.net mvc 4 我如何判断';当我回发我的观点时发生了什么?,asp.net-mvc-4,Asp.net Mvc 4,我首先使用MVC4EF代码,我有一个带有编辑视图的对象,它工作正常。然后我创建了一个非常类似的Create视图,只有当我点击submit按钮时,我才没有在控制器中点击任何断点。我怎么知道这里出了什么问题?是否有地方可以在JavaScript或代码隐藏中设置断点 型号 public class ThirdParty : BaseModel { public Int32 Id { get; set; } [MaxLength(2)] private String Count

我首先使用MVC4EF代码,我有一个带有编辑视图的对象,它工作正常。然后我创建了一个非常类似的Create视图,只有当我点击submit按钮时,我才没有在控制器中点击任何断点。我怎么知道这里出了什么问题?是否有地方可以在JavaScript或代码隐藏中设置断点

型号

public class ThirdParty : BaseModel
{
    public Int32 Id { get; set; }

    [MaxLength(2)]
    private String CountryCode { get; set; }

    [MaxLength(6)]
    private Int32 SequenceNumber { get; set; }

    public String UIN 
    { 
        get 
        {
            if (CountryCode != null && SequenceNumber > 0)
                return CountryCode.ToString() + "-" + SequenceNumber.ToString();
            else
                return null;
        }
        set
        {
            CountryCode = value.ToString().Substring(0, 2);
            SequenceNumber = Int32.Parse(value.ToString().Substring(3, value.Length-3));
        }

    }

    [MaxLength(250)]
    [Required(AllowEmptyStrings = false, ErrorMessage = "{0} is required.")]
    public String Name { get; set; }

    public virtual ICollection<RelationshipType> RelationshipTypes { get; set; }

    // Address
    public Int32 AddressId { get; set; }
    [ForeignKey("AddressId")]
    public virtual Address Address { get; set; }

    public bool IsImported { get; set; }

    public bool IsActive { get; set; }

    public virtual ICollection<Attachment> Attachments { get; set; }

    // constructor
    public ThirdParty()
    {
        RelationshipTypes = new HashSet<RelationshipType>();
        Attachments = new HashSet<Attachment>();
    }
}
我在想,也许我的视图是无效的,这就是为什么它没有发送给控制器。以下是它们在页面标记中的外观:

    <input data-val="true" data-val-number="The field CreatedBy must be a number." data-val-required="The CreatedBy field is required." id="Address_CreatedBy" name="Address.CreatedBy" type="hidden" value="" />
    <input data-val="true" data-val-date="The field CreatedOn must be a date." data-val-required="The CreatedOn field is required." id="Address_CreatedOn" name="Address.CreatedOn" type="hidden" value="" />
    <input data-val="true" data-val-number="The field ModifiedBy must be a number." data-val-required="The ModifiedBy field is required." id="Address_ModifiedBy" name="Address.ModifiedBy" type="hidden" value="" />
    <input data-val="true" data-val-date="The field ModifiedOn must be a date." data-val-required="The ModifiedOn field is required." id="Address_ModifiedOn" name="Address.ModifiedOn" type="hidden" value="" />



        <div class="form-group">
            <input data-val="true" data-val-number="The field CreatedBy must be a number." data-val-required="The CreatedBy field is required." id="CreatedBy" name="CreatedBy" type="hidden" value="" />
            <input data-val="true" data-val-date="The field CreatedOn must be a date." data-val-required="The CreatedOn field is required." id="CreatedOn" name="CreatedOn" type="hidden" value="" />
            <input data-val="true" data-val-number="The field ModifiedBy must be a number." data-val-required="The ModifiedBy field is required." id="ModifiedBy" name="ModifiedBy" type="hidden" value="" />
            <input data-val="true" data-val-date="The field ModifiedOn must be a date." data-val-required="The ModifiedOn field is required." id="ModifiedOn" name="ModifiedOn" type="hidden" value="" />
        </div>

如果您的操作被调用,那么在操作开始时设置断点并附加到流程应该可以做到这一点。 您是否已确保在单击“创建”页面上的“提交”时从浏览器发送POST请求

我没有尝试运行您的代码,但请注意,您已经使用相同的名称定义了两个Create操作来处理POST谓词

对于ASP.NET MVC来说,这可能是不明确的,因为它无法确定要调用什么操作

此外,您正在以下行中定义ReturnUrl路由值:

@using (Html.BeginForm("Create", "ThirdParty", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal" }))
这似乎没有用在你处理帖子的行动中

为什么有两个值为“提交”和“创建”的提交按钮

您可以删除采用额外按钮参数的创建操作并替换标记:

<button name="button" type="submit" class="btn btn-default" value="cancel">Cancel</button>
                <input name="button" type="submit" class="btn btn-primary" value="submit" title="Submit" />
                <input type="submit" value="Create" />
取消
比如:

<a class="btn btn-default" href="@Url.Action("Index", "ThirdParty")">Cancel</a>
<input name="button" type="submit" class="btn btn-primary" value="Create" title="Create" />


我邀请您阅读有关ASP.NET MVC路由工作原理的更多信息。

您使用的是哪种浏览器?我发现在大多数情况下,我的编辑视图和创建视图是相同的。我只需查找记录id并根据我使用的Chrome&IE 8进行更新或插入。我尝试将操作更改为“编辑”,而不是“实际创建”。这一定是我在创建过程中遗漏了什么。所以,原来是创建和修改的隐藏字段没有设置。为了使提交生效,我必须创建第三方对象的一个实例,并在第三方对象和地址对象中填充这些字段,然后从我的create()操作返回这些字段,以使保存生效。如何找出所有失败的验证?是否有一个摘要验证器可以列出所有未设置的字段,这样就不会看起来什么都没发生?让我解释一下,我有多个按钮来显示我尝试了标准的“输入”按钮和“按钮”方法。当我点击这两个按钮时,什么都没有发生(Chrome网络选项卡开发工具中没有网络活动)。我删除了只需要第三方作为参数的HttpPost操作,因此我现在也只有一个HttpPost创建方法。我不知道返回URL在beginnform()中的作用是什么,所以我只是将其替换为null。您建议的取消按钮可以工作。如果我在没有输入必填字段值的情况下单击任何提交按钮,则会触发验证。但是,在输入值并单击任何提交按钮之后,看起来根本没有发生任何事情?你觉得合适吗?您是否有任何客户端验证会阻止表单发布?尝试禁用客户端验证。我只使用EF进行客户端验证。如果我没有为隐藏字段提供值,表单就不会发布,我想这是有道理的。我想在一个摘要框中捕获页面上的所有客户端验证错误,这样以后就不会发生这种情况了。我想你会感到困惑。实体框架不提供任何javascript验证。空的隐藏字段不会阻止表单发布。
    <input data-val="true" data-val-number="The field CreatedBy must be a number." data-val-required="The CreatedBy field is required." id="Address_CreatedBy" name="Address.CreatedBy" type="hidden" value="" />
    <input data-val="true" data-val-date="The field CreatedOn must be a date." data-val-required="The CreatedOn field is required." id="Address_CreatedOn" name="Address.CreatedOn" type="hidden" value="" />
    <input data-val="true" data-val-number="The field ModifiedBy must be a number." data-val-required="The ModifiedBy field is required." id="Address_ModifiedBy" name="Address.ModifiedBy" type="hidden" value="" />
    <input data-val="true" data-val-date="The field ModifiedOn must be a date." data-val-required="The ModifiedOn field is required." id="Address_ModifiedOn" name="Address.ModifiedOn" type="hidden" value="" />



        <div class="form-group">
            <input data-val="true" data-val-number="The field CreatedBy must be a number." data-val-required="The CreatedBy field is required." id="CreatedBy" name="CreatedBy" type="hidden" value="" />
            <input data-val="true" data-val-date="The field CreatedOn must be a date." data-val-required="The CreatedOn field is required." id="CreatedOn" name="CreatedOn" type="hidden" value="" />
            <input data-val="true" data-val-number="The field ModifiedBy must be a number." data-val-required="The ModifiedBy field is required." id="ModifiedBy" name="ModifiedBy" type="hidden" value="" />
            <input data-val="true" data-val-date="The field ModifiedOn must be a date." data-val-required="The ModifiedOn field is required." id="ModifiedOn" name="ModifiedOn" type="hidden" value="" />
        </div>
@using (Html.BeginForm("Create", "ThirdParty", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal" }))
<button name="button" type="submit" class="btn btn-default" value="cancel">Cancel</button>
                <input name="button" type="submit" class="btn btn-primary" value="submit" title="Submit" />
                <input type="submit" value="Create" />
<a class="btn btn-default" href="@Url.Action("Index", "ThirdParty")">Cancel</a>
<input name="button" type="submit" class="btn btn-primary" value="Create" title="Create" />