Visual Studio Express 2012、MVC4 Webアプリケーション、およびSQL2008R2を使用する...
以前は、1つのパラメーターのみを受け入れるストアドプロシージャがありましたが、MVCモデルにそのストアドプロシージャが含まれていると、自分からそれを正常に呼び出して、問題なく結果Controller
を得ることができましたJson
。
これで、2つのパラメーターを受け入れるようにストアドプロシージャを更新しました。MVCモデルを更新しましたが、2つのパラメーターを渡すときに、コントローラーからストアドプロシージャを正しく呼び出すことができません。
これが私の古いストアドプロシージャとコントローラーで、1つのパラメーターを使用しています(これは機能します)。
PROCEDURE [dbo].[GetDependencyNodes]
@CISearchString nvarchar(100)
古いコントローラー:
namespace CMDB.Controllers
{
public class GoJSDiagramNodesAndLinksController : Controller
{
private CMDBEntities db = new CMDBEntities();
public ActionResult GetDependencyNodes(string CISearchString)
{
return Json(db.GetDependencyNodes(CISearchString).ToList(), JsonRequestBehavior.AllowGet);
}
}
}
これが私の新しいストアドプロシージャとコントローラーで、2つのパラメーターを受け入れます。
PROCEDURE [dbo].[GetDependencyNodes]
@CISearchString nvarchar(100),
@ExcludeString nvarchar(100)
新しいコントローラー:
namespace CMDB.Controllers
{
public class GoJSDiagramNodesAndLinksController : Controller
{
private CMDBEntities db = new CMDBEntities();
public ActionResult GetDependencyNodes(string CISearchString, string ExcludeString)
{
return Json(db.GetDependencyNodes(CISearchString, ExcludeString).ToList(), JsonRequestBehavior.AllowGet);
}
}
}
Visual Studio Express 2012で、「returnJson」行に次のようなエラーが表示されます。
「int」には「ToList」の定義が含まれておらず、「int」型の最初の引数を受け入れる拡張メソッド「ToList」が見つかりませんでした。
次の行を変更した場合:
return Json(db.GetDependencyNodes(CISearchString, ExcludeString).ToList(), JsonRequestBehavior.AllowGet);
に:
return Json(db.GetDependencyNodes(CISearchString, ExcludeString).ToString().ToList(), JsonRequestBehavior.AllowGet);
エラーはなくなりますが、コントローラーは正しいJson結果ではなく-1を返します。SQL Managerでストアドプロシージャをテストしましたが、期待される結果を確認できます。
GetDependencyNodesを使用したファイルCMDBModels.Desginer.csの部分的なコードは次のとおりです。
/// <summary>
/// No Metadata Documentation available.
/// </summary>
/// <param name="cISearchString">No Metadata Documentation available.</param>
/// <param name="excludeString">No Metadata Documentation available.</param>
public int GetDependencyNodes(global::System.String cISearchString, global::System.String excludeString)
{
ObjectParameter cISearchStringParameter;
if (cISearchString != null)
{
cISearchStringParameter = new ObjectParameter("CISearchString", cISearchString);
}
else
{
cISearchStringParameter = new ObjectParameter("CISearchString", typeof(global::System.String));
}
ObjectParameter excludeStringParameter;
if (excludeString != null)
{
excludeStringParameter = new ObjectParameter("ExcludeString", excludeString);
}
else
{
excludeStringParameter = new ObjectParameter("ExcludeString", typeof(global::System.String));
}
return base.ExecuteFunction("GetDependencyNodes", cISearchStringParameter, excludeStringParameter);
}
何か案は?
ありがとう。