Asp.net Razor,语法错误-onclick事件参数

Asp.net Razor,语法错误-onclick事件参数,razor,Razor,该代码有4个错误,2个语法错误和2个未终止的字符串常量 我应该如何修复这些错误 您可以在一个Html.Raw调用中进行分解: <input type="button" value="Delete" onclick="deleteMember(@Model.ID, '@ViewBag.returnUrl')"/> 第三种选择是分离关注点;将标记和脚本分开。比我快,但有点像: @{ String onclick = String.Format("deleteMember({0},

该代码有4个错误,2个语法错误和2个未终止的字符串常量

我应该如何修复这些错误


您可以在一个
Html.Raw
调用中进行分解:

<input type="button" value="Delete" onclick="deleteMember(@Model.ID, '@ViewBag.returnUrl')"/>
第三种选择是分离关注点;将标记和脚本分开。比我快,但有点像:

@{
  String onclick = String.Format("deleteMember({0}, '{1}')",
      Model.ID, Html.Encode(ViewBag.returnUrl));
}
<input type="button" value="delete" onclick="@onclick" />

var buttons=document.getElementsByTagName('INPUT');
对于(var b=0;b

尽管很奇怪,第一个括号与razor混淆了(即使它是在属性中声明的)。我自己也不希望出现这种行为。

这是VS中的一个bug,而不是其他任何东西

它认为它仍然会呈现出你所期望的效果

我喜欢布拉德的解决方案


另一个建议的选项是将值弹出到属性中,并使用类似jQuery的方法将数据破折号值传递给函数。

另一种方法是将值分配给javascript变量,并在方法调用中使用它们

<input type="button" value="delete"
    data-task="delete" data-id="@Model.ID" data-returnurl="@ViewBag.returnUrl" />

<!-- .... -->

<script>
  var buttons = document.getElementsByTagName('INPUT');
  for (var b = 0; b < buttons.length; b++){
    if (buttons[b].type != 'button') continue;
    switch (buttons[b].getAttribute('data-task') || ''){
      case 'delete':
        // read data-id & data-returnurl. Do something with them, and
        // move on.
        break;

      // other actions
      case 'add':
      case 'update':
      default:
        break;
    }
  }
</script>

var memberId='@Model.ID';
var returnUrl='@ViewBag.returnUrl';

您也可以使用这种方式在函数中传递参数

<script>
  var memberId = '@Model.ID';
  var returnUrl = '@ViewBag.returnUrl';
</script>

<input type="button" value="Delete" onclick="deleteMember(memberId, returnUrl)"/>

通过onclick事件传递参数的好方法
<script>
  var memberId = '@Model.ID';
  var returnUrl = '@ViewBag.returnUrl';
</script>

<input type="button" value="Delete" onclick="deleteMember(memberId, returnUrl)"/>
@Html.DropDownListFor(M => M.SubscriptionType,
   new SelectList(Model.DefaultPlanName, "value", "displayText"),
   new { @onclick = "Testnew('"+Model.CreationTime+"' )",
    @class = "form-control selectpicker" })