在HttpGet div MVC中将partialview显示为弹出窗口

时间:2017-09-28 06:48:09

标签: javascript jquery asp.net-mvc

我正在开发一个新的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种情况相同的错误。

任何人都可以帮助我,我在这里做错了什么

1 个答案:

答案 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({
        ....
    });
});