我有一个问题,我在使用Asp.net方面真的很新。 我有一个Javascript,我想将数据传递给我的控制器。
<script type="text/javascript">
$("#SearchButton").on("click", function () {
var $sucheMoped = [];
$("#tab_logic tbody tr")
.each(function () {
var $Item = $(this);
var suchfeld = $Item.find("td > input[name='Suchfeld']").val();
var schluessel = $Item.find("td > select[name='Suchschluessel'] > option:selected").val();
alert(suchfeld + "&&&" + schluessel);
$sucheMoped.push({
Suchfeld: suchfeld,
Suchschluesseltyp: schluessel
});
});
window.open('@Url.Action("MainView","MainView")?SuchObject='+$sucheMoped);
})
</script>
我只想将“sucheMoped”从我的javaScript传递给我的Controller。 我的控制器只是期待具有属性Suchfeld和Suchschluesseltyp的对象的IEnumarable。
有人有想法吗?
谢谢大家。
答案 0 :(得分:2)
首先,您需要更改调用控制器操作的方式。您应该使用JSON.stringify()
方法对数组进行字符串化。
所以,这应该是这样的:
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;
}
}
我在这里做的是获取通过URL提交的查询字符串,使用JsonConvert.Deserialize<T>
方法将其转换并返回。
您只需要使用自定义模型绑定器在控制器的操作中装饰您的参数,如下所示:
[HttpGet]
public ActionResult Search([ModelBinder(typeof(ArrayModelBinder))]IEnumerable<MyObject> SuchObject)
{
return View(SuchObject);
}
修改强>
如果要打开新的浏览器窗口, window.open
非常有用。您也可以使用它来打开新标签页。
要在不打开新标签页或窗口的情况下导航到其他位置,请使用window.location
属性,如下所示:
window.location = '@Url.Action("Search", "Home")?SuchObject=' + JSON.stringify(array);
答案 1 :(得分:0)
您可以使用jquery库$ .getScript来调用控制器中的action方法,并在操作中返回javascriptResult类型。
$.getScript("Home","Display")
// Home Controller
private JavaScriptResult Display()
{
string message = "alert('Hello World');";
return new JavaScriptResult { Script = message };
}
答案 2 :(得分:0)
如果使用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();
}
});