加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 为什么我的验证在MVC3中的帖子之前触发了get请求?

发布时间:2020-12-16 06:24:22 所属栏目:asp.Net 来源:网络整理
导读:我有一个MVC3视图,使用户可以创建几个不同的东西.在父视图中,这样做的表单通过 jquery ui选项卡分解,如下所示: div id="tabs" ul lia href="#tabs-1"New Thing 1/a/li lia href="#tabs-2"Different New Thing/a/li /ul div id="tabs-1"@Html.Action("Create
我有一个MVC3视图,使用户可以创建几个不同的东西.在父视图中,这样做的表单通过 jquery ui选项卡分解,如下所示:

<div id="tabs">
        <ul>
            <li><a href="#tabs-1">New Thing 1</a></li>
            <li><a href="#tabs-2">Different New Thing</a></li>
        </ul>
    <div id="tabs-1">@Html.Action("CreateNewThing","NewThingController")</div>
    <div id="tabs-2">@Html.Action("CreateDifferentThing","DifferentThing")</div>
    <div></div>
</div>

<script type="text/javascript">
    $(function () {
        $("#tabs").tabs();
    });
</script>

在部分视图中,我有:

@model NewThingViewModel

    @using (Html.BeginForm("CreateNewThing","NewThingController",FormMethod.Post,new { id = "frmCreateNewThing" }))
    { 
    ...

使用输入字段,提交按钮等.这似乎运作良好:它呈现所有内容并发布正确的控制器操作方法.

但是我现在正在验证中接线,我遇到了问题.

在控制器中,它渲染视图如下:

public ActionResult CreateNewThing(NewThingViewModel model)
{

 ... initializing model fields,drop downs etc.

    return PartialView("CreateNewThing",model);
}

我有一个单独的帖子方法,如下所示:

[AcceptVerbs(HttpVerbs.Post)]
 public ActionResult CreateNewThing(NewThingViewModel newThingViewModel,FormCollection collection)
 {
         .....
 }

样品型号:

public class NewThingViewModel
    {
        [Required]
        [StringLength(50)]
        [Display(Name = "Display Name:")]
        public string DisplayName { get; set; }     
     }

问题是,当页面首次出现时,模型中标记为[必需]的字段显示为红色,并且验证摘要显示页面最初显示时无效. I.E.在用户在初始加载中输入任何内容之前,它的行为就像它已被发布,甚至在文本框中放置任何内容.

我知道第一个非帖子CreateNewThing正在触发,因为我可以在调试器中捕获它,我知道第二个不在初始加载上.

什么会导致我的验证在Get上触发?

是因为Html.Action的工作方式以及我将部分视图渲染到另一个视图的事实?

我在web.config中使用UnobtrusiveJavaScriptEnabled和ClientValidationEnabled = true.

我找不到其他遇到这个问题的人.其他每个例子似乎都有效,然后我再找不到一个例子,其中视图被分成jquery ui标签中包含的三个部分.

我该如何解决?
选项:
我是否需要手动操作Model.IsValid作为解决方法?
使用不同的机制在父视图上呈现部分视图而不是Html.Action?
使用一些javascript / jquery来捕获验证并停止它?

解决方法

您的GET控制器操作上没有方法参数.您可以初始化一个空模型并将其传递给视图,但您不需要将模型传递给该方法

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读