作为参数传递给onclick()的C#变量未定义

时间:2012-06-22 08:56:00

标签: c# javascript .net asp.net-mvc exception-handling

我有一个视图Details,其中包含部分视图_Tabs和第二部分视图_Contents

在其中一个部分视图(_Tabs)中,我有一个图像链接,在onclick函数中,我传递了一个变量CatID。 此变量包含局部视图(称为TabsForItemViewModel)的ViewModel的属性值。

调试时,单击图像时,VS显示:

  

Microsoft JScript运行时错误:'CatID'未定义

部分视图“_Tabs”:

部分视图_Tabs的查看模型为TabsForItemViewModel

@model TabsForItemViewModel
@{
   int CatID = Model.CategoryInfo.CatID; 
 }

<ul>
<li>
   <a href="#GoToCatLevel">
     <img border="0" src="view_cat.png" alt ="Up" title="Go To This Category" 
          width="10" height="10" onclick="LoadCategoryData(CatID, this.href)" />
   </a>
</li>
...

查看“详细信息”:

@model ItemDetailsViewModel
@{    
    ViewBag.Title = "Item Details";
}

<div id="Main">
...
   CategoryInfoViewModel categoryData = new CategoryInfoViewModel(itemD.Ca_ID);                                                   

    TabsForItemViewModel tabsForItem = new TabsForItemViewModel(categoryData);
    <div id="Tabs" class="div-tab">                      
        @{Html.RenderPartial("~/Views/Item/_Tabs.cshtml", tabsForItem );}
    </div>
    ...
</div>

3 个答案:

答案 0 :(得分:4)

CatID不是Javascript变量...它是需要呈现到页面中的c#变量。使用Razor语法,这将是:

onclick="LoadCategoryData(@CatID, this.href)"

答案 1 :(得分:3)

当您在onclick功能中发送@ID时,您忘记在其前面放置一个@符号。

应该是:

   onclick="LoadCategoryData(@CatID, this.href)"

答案 2 :(得分:1)

首先<img>没有属性href。您是否尝试将点击处理程序添加到<a>

我个人不建议你像你一样在html元素中混合使用javascript。你应该使用不引人注目的javascript。

你可以尝试这样的事情,

<img id=".img" border="0" src="view_cat.png" alt ="Up" title="Go To This Category" 
          width="10" height="10" data-catid="@CatID" />

<script type="text/javascript">
  $(".img").click(function(){
     LoadCategoryData($(this).data("catid"), $(this).attr("src"));
  });
</script>

现在您可以将此脚本放在单独的文件中。