【问题标题】:New Partial View does not render新的局部视图不渲染
【发布时间】:2015-08-03 17:13:54
【问题描述】:

在我从第一个局部视图提交信息后,我尝试加载第二个局部视图,但在提交时,我的局部视图刚刚刷新,它显示在同一个局部视图而不是新的局部视图上。我不知道为什么既然我很肯定我设置了我的控制器操作和剃须刀代码来正确加载局部视图。我认为这可能与我做 js 的方式有关,但我不确定。

这是我在第一个局部视图上单击提交时的 ajax 调用。提交时,我想加载第二个视图:

var SubmitInfo = function () {

    var form = $('form#FirstForm');
    var result = form.valid();
    var dataToSerialize = form.serialize();

    if (result) {
        $.ajax({
            url: Url.getFullUrl('Home/FormOneInfo'),
            type: 'Post',
            data: dataToSerialize,
            cache:false,
            success: function (data) {

                LoadFormTwo(data);
            }
        });
    }
    return result;
}

var LoadFormTwo  = function (data) {

    $.ajax({
        type: "GET",
        url:  Url.getFullUrl("Home/FormTwoInfo"),
        success: function (data) {  }
    });
}

需要明确的是,当我调用第二个 ajax 方法时,它会转到我的控制器操作。在我的操作中,我将 bool,DisplayFormTwo 设置为 true,然后在具有特定 div 的主视图中,我有这样的东西:

<div class="centerDivContent">
               if (Model.DisplayFormOne == true){
                    @Html.Partial("FormOne", new ViewModels.FormOneViewModel())
               else if(Model.DisplayFormTwo == true) {
                    @Html.Partial("FormTwo", new ViewModels.FormTwoViewModel())
               }
         </div>

这部分确实在调试器中被命中,但没有呈现新视图。

【问题讨论】:

  • 你如何/在哪里打电话给SubmitInfo
  • 在我的第一个局部视图 FormOne 中,我有一个带有 onclick 侦听器的提交按钮。单击时,它会执行该部分代码。
  • 该按钮可能正在正常提交表单(因此页面被重新加载)。你取消正常的表单提交吗?请发布带有附加js的html
  • 很难理解你想在这里做什么。 $.validator.unobtrusive.parse(form); 毫无意义,因为此时您还没有添加任何动态内容。您将控制器 FormOneInfo() 返回的 html(或者是 json?)传递给 LoadFormTwo() 函数,但从不使用数据。然后你永远不会对控制器 FormTwoInfo() 方法返回的数据(是 html 还是 json)做任何事情。
  • 第一次加载视图时会解析剃须刀代码,因此如果Model.DisplayFormTwo 的初始值为false,那么您的if else 块将永远不会执行。进行 ajax 调用不会改变这一点。

标签: javascript c# jquery ajax asp.net-mvc


【解决方案1】:

我可能读错了,但您不应该在调用 LoadFormTwo 时将数据放入容器中

success: function (data) { $(someElement).append(data) }

【讨论】:

  • someElement 应该是什么?
  • 您希望数据进入的容器。例如,如果您有一个 id 为 myID 的容器,您将放入 $("#myID").append(data);
  • 好吧,我不确定我是否需要它,因为 ajax 调用了一个动作,在该动作中我将 bool 设置为 true,然后在局部视图中使用 razor,它使用设置新的局部视图@html.partial()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-05
相关资源
最近更新 更多