私が達成しようとしていることが可能かどうかはわかりませんが、ユーザーから送信されたアクションに依存する 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;
}
}