Jquery 如何通过;lnkclass“;mvc应用程序中从局部视图到存储过程的值?
我已经创建了父视图和局部视图。我正在进行一个ajax调用(使用Jquery 如何通过;lnkclass“;mvc应用程序中从局部视图到存储过程的值?,jquery,asp.net-mvc,Jquery,Asp.net Mvc,我已经创建了父视图和局部视图。我正在进行一个ajax调用(使用$.load()函数)来调用我的RacesName()方法,以获取与我的按钮的数据raceid属性关联的值。然后我想用该值更新由@ViewBag.Name生成的文本 我发现以下错误 获取http://localhost:53987/Races/RacesName?id=103646584500(内部 服务器错误) 模型 控制器 [HttpGet] public ActionResult Stakes(ClsStakes clsStak
$.load()
函数)来调用我的RacesName()
方法,以获取与我的按钮的数据raceid
属性关联的值。然后我想用该值更新由@ViewBag.Name
生成的文本
我发现以下错误
获取http://localhost:53987/Races/RacesName?id=103646584
500(内部
服务器错误)
模型
控制器
[HttpGet]
public ActionResult Stakes(ClsStakes clsStakes)
{
return View(clsStakes);//return parent view
}
public ActionResult RacesName(ClsStakes clsStakes, int? id)
{
RacesDetails racesDetails = new RacesDetails();
ViewBag.Name = racesDetails.RaceName(id);
return View(clsStakes); // I think this part is creating problem.
}
父视图
<div class="container">
@ViewBag.Name
<div id="mypartial"></div>
</div>
最后,介绍获取racename的过程
public string RaceName(int? Id)
{
SqlParameter[] prms = new SqlParameter[1];
string sSQL;
var RaceName = "";
sSQL = "exec StakesRacesGetRaceDetails @Id";
prms[0] = new SqlParameter("@Id", SqlDbType.Int);
prms[0].Value = Id;
ds = clsUtilities.CreateCommandwithParams(sSQL, prms);
DataTable dataTable = ds.Tables[0];
if(dataTable.Rows.Count>0)
{
DataRow row = dataTable.Rows[0];
RaceName = Convert.ToString(row["race_header"]);
}
return RaceName;
}
500(内部服务器错误)
表示控制器方法正在引发异常。您可以使用浏览器工具(网络选项卡)检查ajax调用的结果,该结果将显示异常的详细信息。在这种情况下,如注释中所示,您没有名为RacesName.cshtml
一个选项是创建一个名为(比如)RacesName.cshtml的局部视图,该视图只包含
@ViewBag.Name
然后,将使用控制器方法
public ActionResult RacesName(int? id)
{
RacesDetails racesDetails = new RacesDetails();
ViewBag.Name = racesDetails.RaceName(id);
return PartialView("_RacesName");
}
并将主视图修改为
<div class="container">
<div id="racename">@ViewBag.Name</div> // add container element
<div id="mypartial"> </div>
</div>
或者,您可以只返回一个JsonResult
并更新DOM。
将控制器修改为
public ActionResult RacesName(int? id)
{
RacesDetails racesDetails = new RacesDetails();
string raceName = racesDetails.RaceName(id);
return JsonResult(raceName, JsonRequestBehavior.AllowGet);
}
还有剧本
$('#mypartial').on('click', '.linkClass', function () {
var race = $(this).data("raceid");
var url = '@Url.Action("RacesName", "Stakes")?id=' + race;
$('#racename').load(url);
});
$('#mypartial').on('click', '.linkClass', function () {
var race = $(this).data("raceid");
var url = '@Url.Action("RacesName", "Stakes")';
$.getJSON(url, { id: race }, function(response) {
$('#racename').text(response);
});
});
500错误意味着问题出在服务器上的C#逻辑中。我建议您设置一个断点,并在进行AJAX调用后逐步执行。try/catch块也是一个好主意。您的
RacesName()
方法没有意义。首先使用.load()
函数,该函数需要html(一个视图,而不是json)。再次设置ViewBag
的值,但在返回JsonResult
时忽略该值。现在还不清楚在ajax调用Executes时您希望发生什么现在您正在返回一个视图
-您是否有一个名为RacesName.cshtml
?@RoryMcCrossan,实际上,因为没有公共操作结果RacesName(ClsStakes ClsStakes,int?id)的视图
,所以我得到了这个错误。但是如果我将返回类型更改为Json
,那么整个部分值都将替换为这个Json值。请建议我如何返回可以传递到父视图的单个字符串。是指racesDetails.RaceName(id)的值的单个字符串代码>?那么,您想用它做什么(您想更新DOM的哪一部分)?非常感谢。这是解决我问题的简单而最好的解决方案。顺便说一句,既然您的模型已经包含一个名为RaceName
的属性,为什么不在按钮中添加该值作为数据RaceName>=“@item.RaceName
属性,然后使用该属性而不是进行ajax调用?抱歉,模型中错误地添加了RaceName
。我会把它从那里移走。
$('#mypartial').on('click', '.linkClass', function () {
var race = $(this).data("raceid");
var url = '@Url.Action("RacesName", "Stakes")?id=' + race;
$('#racename').load(url);
});
public ActionResult RacesName(int? id)
{
RacesDetails racesDetails = new RacesDetails();
string raceName = racesDetails.RaceName(id);
return JsonResult(raceName, JsonRequestBehavior.AllowGet);
}
$('#mypartial').on('click', '.linkClass', function () {
var race = $(this).data("raceid");
var url = '@Url.Action("RacesName", "Stakes")';
$.getJSON(url, { id: race }, function(response) {
$('#racename').text(response);
});
});