Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不将视图模型发送回控制器的低调Ajax调用_Ajax_Jquery_Asp.net Mvc 3_Asp.net Ajax - Fatal编程技术网

不将视图模型发送回控制器的低调Ajax调用

不将视图模型发送回控制器的低调Ajax调用,ajax,jquery,asp.net-mvc-3,asp.net-ajax,Ajax,Jquery,Asp.net Mvc 3,Asp.net Ajax,我的cshtml详细信息视图中有这段代码。我想将VM发送回此控制器方法。这是因为我可以在控制器中设置断点,但是模型为空。这是客户端 function downLoadFile() { $.ajax({ url: '/Software/DownLoadInstall', type: "POST", data: JSON.stringify('@Model'), datatype: "json", conten

我的cshtml详细信息视图中有这段代码。我想将VM发送回此控制器方法。这是因为我可以在控制器中设置断点,但是模型为空。这是客户端

function downLoadFile() {

    $.ajax({
        url: '/Software/DownLoadInstall',
        type: "POST",
        data: JSON.stringify('@Model'),
        datatype: "json",
        contentType: "application/json; charset=utf-8"
     });
}
这是我的控制器的外观

 [HttpPost]
    public ActionResult DownLoadInstall(SoftwareEditViewModel vm)
    {
        try
        {
            SoftwareService.DownLoadInstall(vm);  

            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }

调用
@Model
只需对对象调用
ToString()

您需要首先将
模型
转换为json

示例扩展方法

public static class JsonHelperExtensions
{
    static readonly JavaScriptSerializer Serializer = new JavaScriptSerializer();
    public static string ToJson(this object o)
    {
        return Serializer.Serialize(o);
    }
}
然后在jQuery函数中:

function downLoadFile() {

    $.ajax({
        url: '/Software/DownLoadInstall',
        type: "POST",
        data: JSON.stringify('@Model.ToJson()'),
        datatype: "json",
        contentType: "application/json; charset=utf-8"
     });
}

调用
@Model
只需对对象调用
ToString()

您需要首先将
模型
转换为json

示例扩展方法

public static class JsonHelperExtensions
{
    static readonly JavaScriptSerializer Serializer = new JavaScriptSerializer();
    public static string ToJson(this object o)
    {
        return Serializer.Serialize(o);
    }
}
然后在jQuery函数中:

function downLoadFile() {

    $.ajax({
        url: '/Software/DownLoadInstall',
        type: "POST",
        data: JSON.stringify('@Model.ToJson()'),
        datatype: "json",
        contentType: "application/json; charset=utf-8"
     });
}

我认为一个复杂的模型不太可能产生JSON.stringify可以使用的合理的字符串表示。您最好只传递要下载的项目的id(可能包含在模型中)。如果下载意味着我所想的,它真的应该返回一个FileResult,并且你不应该在之后重定向。也没有必要使用AJAX,因为文件下载不会让您离开页面。我根据你的名字做了一些大的假设——如果我错了,你真的应该用更好的名字

[HttpPost]
public ActionResult DownLoadInstall(int id)
{
    return SoftwareService.DownLoadInstall( ModelFromID(id) );  
}

private SoftwareViewModel ModelFromID( id )
{
    ... populate the model needed for download from id ...
}
客户

function downLoadFile() {
    location.href = '/software/downloadinstall/' + @Model.ID;
}

我认为一个复杂的模型不太可能产生JSON.stringify可以使用的合理的字符串表示。您最好只传递要下载的项目的id(可能包含在模型中)。如果下载意味着我所想的,它真的应该返回一个FileResult,并且你不应该在之后重定向。也没有必要使用AJAX,因为文件下载不会让您离开页面。我根据你的名字做了一些大的假设——如果我错了,你真的应该用更好的名字

[HttpPost]
public ActionResult DownLoadInstall(int id)
{
    return SoftwareService.DownLoadInstall( ModelFromID(id) );  
}

private SoftwareViewModel ModelFromID( id )
{
    ... populate the model needed for download from id ...
}
客户

function downLoadFile() {
    location.href = '/software/downloadinstall/' + @Model.ID;
}

tvanfosson thx…你的目的是对的。我们公司有30个dc,每个国家都有自己的本地驱动器,用于下载软件。因此,我必须在退出后使用Response.WriteFile将文件流式传输回来,并进行“网络使用”以从正确的logonserver下载文件。我不认为我不需要使用Ajax。我有两个按钮和详细信息页面…他们可以下载并查看帮助文件,也可以下载实际安装。对不起,如果我收到这张小纸条。谢谢你的回复。直到你提到FileResult,我才知道。这看起来像是一条路要走…我在传统的ASPX模式下构建了这个应用程序的原型,现在在MVC3中重做了它…这是一个巨大的帮助感谢你的参考…这里是一个伟大的关于它的tvanfosson thx的文章…关于这个目的,你已经做对了。我们公司有30个dc,每个国家都有自己的本地驱动器,用于下载软件。因此,我必须在退出后使用Response.WriteFile将文件流式传输回来,并进行“网络使用”以从正确的logonserver下载文件。我不认为我不需要使用Ajax。我有两个按钮和详细信息页面…他们可以下载并查看帮助文件,也可以下载实际安装。对不起,如果我收到这张小纸条。谢谢你的回复。直到你提到FileResult,我才知道。这看起来像是一条路要走…我在传统的ASPX模式下构建了这个应用程序的原型,现在已经在MVC3中重做了它…这是一个巨大的帮助,感谢您的参考…这里是一篇关于它的精彩文章