2016-06-10 94 views
0

有一个JavaScript语法错误ASP.NET MVC运行JavaScript语法错误没有错误代码

表单元素:

@Html.DropDownListFor(model => model.UNIT, 
    new SelectList(ViewBag.UnitList, "Value", "Text"), 
    "-- Select a Unit --", 
    new {onchange = "showSelectedValue" }) 

的Javascript:

function showSelectedValue() { 
      alert('Selected: ' + @Model.UNIT); 
      // Syntax error underlines the closing parentethesis of the alert function 
     } 

我要检查什么UNIT是被选中的功能showSelectedValue

回答

1

Razor执行服务器端和JavaScript执行客户端,所以你不能真正混合在一起;您的代码会将初始值的值@Model.UNIT作为字符串文字放入脚本中,并且看起来像alert('Selected: ' + Whatever UNIT is);,这是一种语法错误,因为Whatever UNIT is未包含在引号中。

最简单的事情就是将select作为参数传递给onchange函数。

@Html.DropDownListFor(model => model.UNIT, 
    new SelectList(ViewBag.UnitList, "Value", "Text"), 
    "-- Select a Unit --", 
    new {onchange = "showSelectedValue(this)" }) 

function showSelectedValue(ddList) { 
     alert('Selected: ' + ddList.value); 
} 
1

这可能帮助:

@Html.DropDownListFor(model => model.UNIT 
    , new SelectList(ViewBag.UnitList, "Value", "Text") 
    , "-- Select a Unit --" 
    , new { @id = "ddUnit" }); 

脚本:

$(document).ready(function() { 
     $("#ddUnit").change(function() { 
      alert($(this).val()); 
     }); 
    }); 

如果您想直接获取的价值,在脚本中使用:

var value = $("#ddUnit").val(); 
+0

ISN” t'#UNIT'够了吗?为什么要为下拉列表分配一个新的ID?只是好奇 –

+0

分配给下拉列表的ID,以便任何与下拉列表相关的事件都可以写入您的脚本中,并且如果需要在其他脚本函数中直接获取该值。 其次,在JavaScript中,不能直接从模型中读取值。如果您只想在问题中指定的选择更改事件中获取下拉值,则可以将您的脚本(在您的问题中)修改为: function showSelectedValue(){ alert('Selected:'+ @Html .RAW(Json.Encode(Model.UNIT))); } –

+0

非常感谢,但其他人回应得更快。 –