我不确定我想要实现的是否可能,但我正在尝试创建一个通用应用程序,它将返回一个依赖于用户提交的动作的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;
}
}
答案 0 :(得分:1)
您传递以查看错误类型的模型。检查视图文件中@model
语句中的模型类型,并确保从此代码发送apt模型:
if (func.ModuleName == "GRID")
return PartialView("GridView", func.Parameters[1].ToString());
else
return PartialView("FormView", func.Parameters[1].ToString());
答案 1 :(得分:1)
return PartialView("GridView", func.Parameters[1].ToString());
这一行实际上并没有调用GridView动作方法,它只返回名为“GridView”的局部视图,并将第二个参数作为模型传递。正如YD1m指出的那样,这会导致错误,因为视图未设置为接受字符串作为模型。