首页 新闻 会员 周边 捐助

MVC5中使用Ajax辅助方法无法实现更新本页面元素?

0
悬赏园豆:20 [已解决问题] 解决于 2014-10-22 19:42

一个MVC5网站,在一个Index页面中有一个文本框和一个按钮,要求点击按钮之后将文本框中的内容显示在文本框上方,同时页面其他元素保持不变。使用Ajax.BeginForm()方法时,也指定了要更新的元素id,但是运行的时候点击按钮就进到一个新的页面显示文本框中内容了。无法达到要求。请教一下怎么解决?谢谢!

附上代码:

    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Index(string name)
        {
            return PartialView("Result", name);
        }
}
<!-- Index.cshtml -->
<
div id="content"> <div id="targetDiv"></div> @using (Ajax.BeginForm("Index", "Home", new AjaxOptions { UpdateTargetId = "targetDiv", InsertionMode = InsertionMode.Replace, })) { @Html.TextBox("name") <button type="submit" id="submit">submit</button> } </div>
<!-- Result. cshtml -->
@{
    string name = (string)Model;
}

@name
飞鸟_Asuka的主页 飞鸟_Asuka | 菜鸟二级 | 园豆:393
提问于:2014-10-22 14:44
< >
分享
最佳答案
0
@if {

string  name=Request.QueryString["name"];

@Html.Partial("Result", name);

}

@Html.TextBox("name")

<button type="submit" id="submit">submit</button>




<!-- Result. cshtml -->
<!-- Result. cshtml -->
@Html.Raw( (string)Model)

 

收获园豆:20
悟行 | 专家六级 |园豆:12559 | 2014-10-22 15:01

那如果我想用post方式请求怎么处理?

飞鸟_Asuka | 园豆:393 (菜鸟二级) | 2014-10-22 15:09

@飞鸟_Asuka: Request.Form["name"];

悟行 | 园豆:12559 (专家六级) | 2014-10-22 15:09

@飞鸟_Asuka: 最好的方式是用ajax访问。

 $.ajax({
        type: "post",
        url: "/Home/Result",
        data: { name: name},
        dataType: "html",
        success: function (data) {
            $("#data").html(data);
        },
        error: function (textStatus) {
            window.location.href = "/Error/Index";
        }
    });
悟行 | 园豆:12559 (专家六级) | 2014-10-22 15:11

@ArnoldZhang: 我在Index()方法中加入了如下语句

[HttpPost]
        public ActionResult Index(string name)
        {
            if(Request.IsAjaxRequest())
                return PartialView("Result", name);
            return View();
        }

很奇怪的是Request.IsAjaxRequest()方法的返回值是False! 但是我前端明明是用了Ajax辅助类啊,而且该引入的js文件都引入了

飞鸟_Asuka | 园豆:393 (菜鸟二级) | 2014-10-22 15:24

@飞鸟_Asuka: jquery.unobtrusive-ajax.min.js

这个js文件引用了吗??

webconfig中添加:

//Web.config
<appSettings>
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>

 

悟行 | 园豆:12559 (专家六级) | 2014-10-22 15:26

@ArnoldZhang: 都引用了啊,包括web.config中也有相应的配置代码

飞鸟_Asuka | 园豆:393 (菜鸟二级) | 2014-10-22 15:28

@飞鸟_Asuka: 是否用了jquery中的live,这个在有些版本中在chrome浏览器中报错的。

悟行 | 园豆:12559 (专家六级) | 2014-10-22 15:30

@飞鸟_Asuka: 如果坚持js没有报任何错,就把type: "post", 改成get请求方式试试。

悟行 | 园豆:12559 (专家六级) | 2014-10-22 15:32

@ArnoldZhang: 而且我看了下MVCMusicStore这个示例项目,也是同样的写法,但是那个就没有问题,自己从头开始写一遍就有问题

飞鸟_Asuka | 园豆:393 (菜鸟二级) | 2014-10-22 15:33

@飞鸟_Asuka: 有可能是版本的问题。

悟行 | 园豆:12559 (专家六级) | 2014-10-22 15:34

@ArnoldZhang: 不行,如果改成get方法就没有任何反应了,但是浏览器的console里也没有报错

飞鸟_Asuka | 园豆:393 (菜鸟二级) | 2014-10-22 15:41

@飞鸟_Asuka: 

[HttpPost]
        public ActionResult Index(string name)
        {
            return PartialView("Result", name);
        }
这个当然要改成[HttpGet]
悟行 | 园豆:12559 (专家六级) | 2014-10-22 15:42

@ArnoldZhang: 改过了,不行

飞鸟_Asuka | 园豆:393 (菜鸟二级) | 2014-10-22 15:45

@ArnoldZhang: 奇怪了,我新建一个项目,重新编写了一遍代码,居然神奇地实现了我需要的功能。。。

还是谢谢你了,分数给你了

飞鸟_Asuka | 园豆:393 (菜鸟二级) | 2014-10-22 19:40
其他回答(2)
0

既然跳转了,那么就证明ajax未生效。请确认jquery, jquery.unobtrusive-ajax.min.js 等必须文件是否已引用,并生效。

幻天芒 | 园豆:37205 (高人七级) | 2014-10-22 16:03

我是从NuGet上获取的稳定版本,并且都引用了

支持(0) 反对(0) 飞鸟_Asuka | 园豆:393 (菜鸟二级) | 2014-10-22 17:00
0

你这需求直接用脚本就能完成,为什么要return PartialView("Result", name);,就算想用ajax返回页应该是jsonresult或者content什么的,返回partialview不跳才怪

draculav | 园豆:734 (小虾三级) | 2014-10-22 16:40

如果是ajax的话,是不管返回值的。如果第二句话有误。

支持(0) 反对(0) 幻天芒 | 园豆:37205 (高人七级) | 2014-10-22 23:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册