Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.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
Pasing Javascript结果以查看_Javascript_C#_Asp.net_Asp.net Mvc_Razor - Fatal编程技术网

Pasing Javascript结果以查看

Pasing Javascript结果以查看,javascript,c#,asp.net,asp.net-mvc,razor,Javascript,C#,Asp.net,Asp.net Mvc,Razor,我有一个问题,我对使用Asp.net非常陌生。 我有一个Javascript,我不想把数据传递给我的控制器 $(“#搜索按钮”)。在(“单击”上,函数(){ var$sucheMoped=[]; $(“#制表符逻辑体tr”) .每个(功能){ 变量$Item=$(此项); var suchfeld=$Item.find(“td>input[name='suchfeld']”)val(); var schluessel=$Item.find(“td>select[name='Suchschlu

我有一个问题,我对使用Asp.net非常陌生。 我有一个Javascript,我不想把数据传递给我的控制器


$(“#搜索按钮”)。在(“单击”上,函数(){
var$sucheMoped=[];
$(“#制表符逻辑体tr”)
.每个(功能){
变量$Item=$(此项);
var suchfeld=$Item.find(“td>input[name='suchfeld']”)val();
var schluessel=$Item.find(“td>select[name='Suchschluessel']>option:selected”).val();
警报(suchfeld+“&&&”+schluessel);
$suchemed.push({
Suchfeld:Suchfeld,
如:施鲁塞尔
});
});
window.open('@Url.Action(“MainView”,“MainView”)?SuchObject='+$suchemed);
})

您可以使用jquery库$.getScript调用控制器中的操作方法,并在操作中返回javascriptResult类型

$.getScript("Home","Display")

// Home Controller
private JavaScriptResult Display()
{
    string message = "alert('Hello World');";

    return new JavaScriptResult { Script = message };
}

如果使用jQuery.ajax方法,可以将复杂对象作为
data
参数传递

$.ajax({
    url: '@Url.Action("MainView", "MainView")',
    type: 'GET',
    data: { 'SuchObject': $sucheMoped },
    success: function (htmlContent) {
        // write content to new window (from http://stackoverflow.com/a/23379892/1450855)
        var w = window.open('about:blank', 'windowname');
        w.document.write(htmlContent);
        w.document.close();
    }
});

首先,您需要更改调用控制器操作的方式。您应该使用
JSON.stringify()
方法对数组进行字符串化

所以,这应该是这样的:

[HttpGet]
public ActionResult Search([ModelBinder(typeof(ArrayModelBinder))]IEnumerable<MyObject> SuchObject)
{
    return View(SuchObject);
}
window.open('@Url.Action(“MainView”,“MainView”)?SuchObject='+JSON.stringify($sucheMoped))

然后,您需要创建一个自定义模型绑定器,用action参数绑定数组。这是一个仅用于演示目的的简单阵列模型绑定器,它不考虑故障或其他问题,但它在这种情况下工作,传递正确的数据,因此请修改它以满足您的需要

public class ArrayModelBinder: DefaultModelBinder
{
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
        var rawArray = controllerContext.HttpContext.Request.QueryString["SuchObject"];
        var array = JsonConvert.DeserializeObject<IEnumerable<MyObject>>(rawArray);

        return array;
    }
}
公共类ArrayModelBinder:DefaultModelBinder
{
公共重写对象BindModel(ControllerContext ControllerContext,ModelBindingContext bindingContext)
{
var rawArray=controllerContext.HttpContext.Request.QueryString[“SuchObject”];
var array=JsonConvert.DeserializeObject(rawArray);
返回数组;
}
}
我在这里要做的是获取通过URL提交的查询字符串,用
JsonConvert.Deserialize
方法转换它并返回它

只需使用自定义模型绑定器在控制器的操作中修饰参数,如下所示:

[HttpGet]
public ActionResult Search([ModelBinder(typeof(ArrayModelBinder))]IEnumerable<MyObject> SuchObject)
{
    return View(SuchObject);
}
[HttpGet]
公共操作结果搜索([ModelBinder(typeof(ArrayModelBinder))]IEnumerable SuchObject)
{
返回视图(SuchObject);
}
编辑

窗口。如果要打开新的浏览器窗口,“打开”
很有用。您也可以使用它打开一个新选项卡

要在不打开新选项卡或窗口的情况下导航到其他位置,请使用
窗口。location
属性,如下所示:


window.location='@Url.Action(“搜索”、“主页”)?SuchObject='+JSON.stringify(数组)

使用此url时,我的url看起来是:我的控制器中没有参数完全编辑了我的答案,因为你想传递一个复杂的对象。谢谢,这非常有效。我的最后一个问题是,这个window.open方法总是打开一个新选项卡,但我只想覆盖我的激活…然后使用
window.location
。相应地更新。如果它解决了你的问题,请投票并标记为答案。谢谢