首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >MVC -表单发布到在布局页面中返回JavaScriptResult的操作中,干扰基本表单--导致浏览器呈现应用程序HTML文本。

MVC -表单发布到在布局页面中返回JavaScriptResult的操作中,干扰基本表单--导致浏览器呈现应用程序HTML文本。
EN

Stack Overflow用户
提问于 2012-05-22 08:51:08
回答 2查看 759关注 0票数 0

在ASP.NET MVC中,我有一个主要的标准表单,它发布到一个操作,并在相同的视图中呈现响应。

问题是响应类型返回为application/,因此浏览器将HTML呈现为文本。

我已经缩小了问题的范围,因为母版页中包含了一些部分视图,这些视图将表单呈现回返回JavaScriptResult.的操作。

当我删除这些部分视图引用时,主表单post响应的响应类型是text/html。

为什么JavaScriptResult操作会干扰主表单post。我没有发布到这个操作,所以为什么MVC决定推断响应内容类型应该是application/?

基本主要形式:

代码语言:javascript
代码运行次数:0
运行
复制
@using (Html.BeginForm("TestSearch", "TestSearch", FormMethod.Post))
{
    ....
}

[HttpPost]
public ActionResult TestSearch(TestSearchInfo testSearchInfo)
{
    ...

    return View(testSearchInfo);
}

布局页面中的

代码语言:javascript
代码运行次数:0
运行
复制
@{Html.RenderPartial("~/Views/Account/LoginOrRegister.cshtml");}

Which is a form that posts to...

[HttpPost]
public JavaScriptResult Login(LoginInfo loginInfo)
{
}

更新:

核心问题似乎是,当我单击主表单的submit按钮时,启用了MVC ajax的另一个表单也会回发,因此,这两个操作都在触发,而返回JavaScriptResult的操作是第二个触发的。我还是不知道如何防止这种行为..。

更新:

见下面的答案

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-22 10:23:48

回答这里,希望它能帮助别人。

我修改了所有涉及JavaScript响应的表单,以便使呈现控件的操作(传统上是带有HttpGet属性的操作)移除HttpGet,这样操作就可以在GET和POST上下文中触发。

这需要重命名表单发布到的操作,因此对于应该触发哪种方法没有任何歧义。

我想这是有意义的--我想我期待看到的是,在包含的表单不是POST目标的部分视图的呈现中,应该使用get重载来呈现。我明白为什么这不是它的工作方式。

代码语言:javascript
代码运行次数:0
运行
复制
// No GET / POST Attribute, this can no fire in both GET and POST contexts
public ActionResult Login()
{
    .. This will now fire for every page load, where as before the HttpGet
       filter only allowed to run in a GET context. 
}

[HttpPost]
public JavaScriptResult DoLogin(LoginInfo loginInfo)
{
}
票数 0
EN

Stack Overflow用户

发布于 2012-05-22 09:23:53

我想您应该避免HTML表单嵌套,以消除这个问题。这在语义上也不正确。

在ASP.NET WebForms时代,这是一个问题,但是使用ASP.NET MVC应该容易得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10698697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档