Jquery 如何通过;lnkclass“;mvc应用程序中从局部视图到存储过程的值?

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

我已经创建了父视图和局部视图。我正在进行一个ajax调用(使用
$.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);
    });
});