我正在开发一个新的MVC应用程序。我的问题是在div中打开一个部分视图作为弹出窗口。
如果我为没有任何参数的动作方法调用$("#div").load()
方法,它工作正常。如果有任何参数则根本不起作用。
查看:
@Html.ActionLink("Create", "ActionName", ControllerName,new{Param1=Model.Param1,Param2=Model.Param2},new {@id="CreateNew" })
<div id="DivCreateView"></div>
使用Javascript:
$(function() {
$('#CreateNew').click(function() {
debugger;
var Param1 = $("#hdnValue").val();
var Param2 = $("#hdnValue2").val();
$.get(this.href, function(result) {
debugger;
var div = $("#DivCreateView");
div.load("/ControllerName/ActionName"),
div.dialog({
modal: true
, width: 600
, height: 600
, title: "Add Dialog"
, resizable: false
, close: function(event, ui) {
location.reload();
}
});
});
return false;
});
});
控制器:
[HttpGet]
public PartialViewResult ActionName(int Param1, string Param2) {
Model vmModel = new Model();
vmModel.Param1 = Param1;
vmModel.Param2 = Param1;
return PartialView(vmModel);
}
我尝试的方案
1)仅在ActionLink中传递参数,在新窗口中返回视图
2)如果我在load函数和actionLink中传递参数。它在新窗口中打开视图
3)仅在ajax调用中传递参数,给出错误&#34;参数字典包含方法{{1}的非可空类型Param1
的参数System.Int32
的空条目在System.Web.Mvc.PartialViewResult ActionName(Int32, System.String)
中。可选参数必须是引用类型,可空类型,或者声明为可选参数。
参数名称:参数&#34;使用Configurations.Controllers.ControllerName
4)如果我将?Length=
作为actionlink
,则生成的网址没有任何参数和与第3种情况相同的错误。
任何人都可以帮助我,我在这里做错了什么
答案 0 :(得分:0)
您需要传递.load()
函数的第二个参数中的值。此外,您对方法进行了2次调用,您应该使用$.get()
或div.load()
,而不是两者。
首先使用
生成链接<a href="#" id="CreateNew">Create</a>
然后将脚本更改为
var url = '@Url.Action("actionName", "controllerName")';
var div = $("#DivCreateView");
$('#CreateNew').click(function() {
var Param1 = $("#hdnValue").val();
var Param2 = $("#hdnValue2").val();
div.load(url, { Param1: Param1, Param2 : Param2 }, function() {
div.dialog({
....
});
});
});
或者(代替div.load()
)
$.get(url, { Param1: Param1, Param2 : Param2 }, function(data) {
div.html(data);
div.dialog({
....
});
});