繁体   English   中英

从ASP.NET MVC3 C#中的另一个函数返回PartialView

[英]Return PartialView from another function in ASP.NET MVC3 C#

我不确定我想要实现的是否可能,但我正在尝试创建一个通用应用程序,它将返回依赖于用户提交的操作的PartialView。 不幸的是,以下代码在运行时抛出以下错误:

传递到字典中的模型项的类型为“System.String”,但此字典需要“Core.Entities.CGrid”类型的模型项

在我看来,我使用以下jQuery挂钩到任何锚标签:

$("a").live('click', function (e) {
            if ($(this).attr("href").indexOf("#func_") > -1) {           {
                var func = '/Core/FunctionCall?function=' + $(this).attr("href").replace("#func_", "");
                $.ajax({
                    url: func,
                    type: 'GET',
                    async: false,
                    success: function (result) {
                        $("#customerTabBody").empty();
                        $("#customerTabBody").html(result);
                    }
                });
            }
        });

这工作并且已经过测试,返回了FunctionCall.cshtml占位符页面。 但是,我已经将FunctionCall函数修改为类似于下面(这是正在进行的工作):

public class CoreController : Controller
{
    [HttpGet]
    public ActionResult FunctionCall(string function)
    {
        Core.Entities.CFunction func = null;

        try
        {
            using (CFunction f = new CFunction())
                func = f.GetFunction(Convert.ToInt32(function));

            if (func.ModuleName == "GRID")
                return PartialView("GridView", func.Parameters[1].ToString());
            else
                return PartialView("FormView", func.Parameters[1].ToString());
        }
        catch (Exception)
        {
            return null;
        }
    }

    [HttpGet]
    public ActionResult GridView(string gridView)
    {
        Core.Entities.CGrid grid = null;

        using (CGrid data = new CGrid()) 
            grid = data.GetGridNew(gridView);

        return PartialView(grid);
    }

    [HttpGet]
    public ActionResult FormView(string formView)
    {
        Core.Entities.CForm form = null;

        using (CForm data = new CForm())
            form = data.GetForm(formView);

        return PartialView(form);
    }
}

如果我直接调用函数“GridView”和“FormView”,那么部分视图会正确显示而没有错误,而不是满足jQuery中可能需要的每种可能类型的视图(或构建锚点的函数)链接)我想有一个函数来处理请求并根据传递的值返回一个视图。 问题似乎是从另一个函数中返回这些PartialViews。

任何帮助是极大的赞赏。

ETA:谢谢@ YD1m(以及其他所有回复的人)。 我假设代码将直接跳转到“GridView”或“FormView”函数,而不是仅返回视图。 我想要更多咖啡:)

以下是现在可以使用的修订代码:

[HttpGet]
    public ActionResult FunctionCall(string function)
    {

        Core.Entities.CFunction func = null;

        try
        {
            using (CFunction f = new CFunction())
                func = f.GetFunction(Convert.ToInt32(function));

            if (func.ModuleName == "CORE")
            {
                Core.Entities.CGrid grid = null;

                using (CGrid data = new CGrid())
                    grid = data.GetGridNew(func.Parameters[1].ToString());

                return PartialView("GridView", grid);
            }
            else
            {
                Core.Entities.CForm form = null;

                using (CForm data = new CForm())
                    form = data.GetForm(func.Parameters[1].ToString());

                return PartialView("FormView", form);
            }
        }
        catch (Exception)
        {
            return null;
        }
    }

您传递以查看错误类型的模型。 检查视图文件中@model语句中的模型类型,并确保从此代码发送apt模型:

if (func.ModuleName == "GRID")
                return PartialView("GridView", func.Parameters[1].ToString());
            else
                return PartialView("FormView", func.Parameters[1].ToString());
return PartialView("GridView", func.Parameters[1].ToString());

该行实际上并不调用GridView动作方法,它只返回名为“GridView”的局部视图,并将第二个参数作为模型传递。 正如YD1m指出的那样,这会导致错误,因为视图未设置为接受字符串作为模型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM