Pasing Javascript结果以查看
我有一个问题,我对使用Asp.net非常陌生。 我有一个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
$(“#搜索按钮”)。在(“单击”上,函数(){
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
。相应地更新。如果它解决了你的问题,请投票并标记为答案。谢谢