【问题标题】:MVC return View not working, after @RenderBody, view got reset to previous viewMVC 返回视图不起作用,@RenderBody 后,视图重置为上一个视图
【发布时间】:2017-01-16 13:16:24
【问题描述】:

我有一个带有一些代码的视图(viewOne):

$('#btnNext').on('click', function () {
    var id = $('#ID').val();
    window.location.href = '@Url.Action("myAction", "myController")/?id=' + id;
...

在我的控制器中:

public ViewResult myAction(string id)
{
    //get model from id
    return View("viewTwo", model);
}

在视图二中:

<tbody>
    @foreach (var c in Model)
    {
       <tr class="table-row ">
           ...        
           <td>
              <div>@Html.DisplayFor(m=>c.Name)</div>
           </td>
           ...
       </tr>
    }
</tbody>

我的问题:

单步执行控制器返回 View("viewTwo", model);然后通过 viewTwo 中的 @foreach 循环,然后进一步跨过 _Layout.cshtml 中的 @RenderBody(),viewOne 被重新加载,而不是显示 viewTwo!

非常感谢任何帮助!

【问题讨论】:

  • _Layout.cshtml 是否渲染 viewOne?
  • 所以即使你在浏览器中直接访问myAction,它会渲染 viewOne 内容而不是 viewTwo 吗?使用您在问题上发布的代码,现在应该会发生。
  • @Shyju,是的,我最终得到了 viewOne,viewTwo 从来没有出现过,我知道它不应该发生,这就是我感到困惑的原因......
  • @BlueEyedBehemoth,是的
  • 你能添加#btnNext的html吗,具体来说,它是一个`

标签: asp.net-mvc twitter-bootstrap asp.net-mvc-5


【解决方案1】:

单击表单中的&lt;button type='submit'&gt; 将导致表单/页面/视图发布+重新加载。

在这种情况下,&lt;button&gt; 没有type=submit,但也没有任何默认提交的type=

添加一个类型来停止默认提交行为:

<button type='button' ...

来自此页面的更多信息:https://developer.mozilla.org/en/docs/Web/HTML/Element/button

类型 按钮的类型。可能的值是:

  • 提交:按钮将表单数据提交给服务器。如果未指定属性,或者属性动态更改为空值或无效值,则这是默认值。
  • reset:该按钮将所有控件重置为其初始值。
  • 按钮:该按钮没有默认行为。它可以有与元素事件相关联的客户端脚本,这些事件在事件发生时触发。
  • menu:按钮打开一个通过其指定元素定义的弹出菜单。

【讨论】:

  • 再次感谢@freedomn-m!
【解决方案2】:

您已使用 window.location.href,它将加载带有第二个视图的页面,因此您的第一个视图会重新加载。

使用 AJAX 调用,只需 将第二个视图添加到您的可用 html

【讨论】:

  • 它们是两个不同的视图,如何在 viewOne 中添加 viewTwo?
  • “所以你的第一个视图被重新加载” - 你能解释为什么 window.location.href 移动到第二个视图会是“so first查看重新加载”好吗?如果您使用 window.location.href 它应该更改网址,而不是重新加载任何内容(这不是帖子)。
猜你喜欢
  • 2015-08-09
  • 2016-06-19
  • 2015-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-25
  • 1970-01-01
相关资源
最近更新 更多