【问题标题】:load a new view from asp using MVC使用 MVC 从 asp 加载新视图
【发布时间】:2013-10-02 22:17:58
【问题描述】:

好的,情况是我在我的索引页面上。我有一个 jQuery onClick 事件如下:

$('#example').on('click', 'tr', function (e) {
    var aData = oTable.fnGetData(this);
    showCampaign(aData);
});

我已验证此函数按预期工作,并且 aData 最终填充了一个数组,其中包含来自被点击的表格行中每个单元格的数据。

我需要做的是,当这个点击甚至发生时,将 aData 拍摄到我的 MVC 并加载一个我可以用该数据填充的新视图。这是我目前正在尝试的......

function showCampaign(aData) {
    $.ajax({
        type: "POST" ,
        url: "Test/Show",
        data : aData
   }).done(function (response) {
        window.location.href = response.Url;
   }).error(function (jqxhr, textstatus, errorthrown) {
        alert("didn't work");
   });
};

这个函数工作到一定程度......它确实向我的 MVC 发送了一个请求......但我没有看到数据通过(它的 null),当我返回响应字符串时,页面没有加载。

我的 Controller 类中的方法如下所示:

[HttpPost]
public ActionResult ShowCampaign(String[] aData)
{
   var redirectUrl = new UrlHelper(Request.RequestContext).Action("TestView","Test");
   return Json(new {Url : redirectUrl });
}

出于上述目的,TestView 是我要加载的视图的名称,而 Test 是控制器。

我在这里做错了什么..我试图理解 MVC,但我还不明白......灯没有点击。

【问题讨论】:

    标签: c# jquery asp.net-mvc controller views


    【解决方案1】:

    这里的问题是您没有命名参数。如果像你说的 aData 是一个数组,你必须将它包装到一个对象中。该属性应与控制器方法的参数名称匹配。

    function showCampaign(aData) {
    $.ajax({
        type: "POST" ,
        url: "Test/ShowCampaign",
        data: { aData: aData }
    }).done(function (response) {
        window.location.href = response.Url;
    }).error(function (jqxhr, textstatus, errorthrown) {
        alert("didn't work");
       });
    };
    

    另一个您可能会觉得有用的提示。您可以使用Url.Action() 来生成您的网址。 http://msdn.microsoft.com/en-us/library/system.web.mvc.urlhelper.action(v=vs.108).aspx

    【讨论】:

    • 我按照您的建议将数据封装在一个对象中,它工作正常。在这一点上,我收到了一个 url 响应,它尝试按照我的预期重定向.....但它说找不到资源给定的 url 是 localhost:"port"/Test/TestView 我已经验证在解决方案资源管理器下,我的 index.aspx 和 TestView.aspx 都位于 Views 中的 Test 文件夹下......我错过了什么
    • 你的项目中是否有一个名为 TestController 的控制器?
    • 控制器被命名为TestController,这就是ShowCampaign()函数所在的位置。
    • 那个控制器也有一个叫做TestView的方法吗?这就是对 localhost/Test/TestView 的调用应该带你去的地方。里面应该有return View(); 行。
    • 那行得通...谢谢...最后一个小问题...我将封装的数组发送到控制器中的 HttpPost 函数...然后将重定向 url 作为 Json .. .. 然后我如何将数据一直填充到实际的登录页面?
    猜你喜欢
    • 1970-01-01
    • 2017-10-31
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    相关资源
    最近更新 更多