簡體   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