11
<input type="button" value="Delete" onclick="deleteMember(@Model.ID, '@ViewBag.returnUrl')"/>

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

我应该怎么做才能修复这些错误?

在此处输入图像描述

4

4 回答 4

29

你可以在一个Html.Raw电话中打破它:

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

或将其分配给string第一个,然后在属性中引用该变量。

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

第三种选择是分离关注点;将标记和脚本分开。尼尔打败了我,但类似:

<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>

虽然奇怪的是第一个括号与剃刀混淆(即使它是在属性中声明的)。我自己不会想到这种行为。

于 2013-03-25T14:22:17.120 回答
1

这更像是 VS 中的一个错误。

它认为它仍然会按照您的预期呈现。

我喜欢布拉德的解决方案。

另一个推荐的选项是将您的值弹出到data-dash属性中,并使用 jQuery 之类的东西将 data-dash 值传递给您的函数。

于 2013-03-25T14:27:11.477 回答
0

您可以这样做的另一种方法是将值分配给javascript变量并在方法调用中使用它们。

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

<input type="button" value="Delete" onclick="deleteMember(memberId, returnUrl)"/>
于 2013-10-03T16:47:30.080 回答
0

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

@Html.DropDownListFor(M => M.SubscriptionType,
   new SelectList(Model.DefaultPlanName, "value", "displayText"),
   new { @onclick = "Testnew('"+Model.CreationTime+"' )",
    @class = "form-control selectpicker" })
于 2017-04-11T09:36:49.427 回答