【问题标题】:Javascript function argument is not showing in Asp.Net MVC RouteValueDictionary?Javascript 函数参数未显示在 Asp.Net MVC RouteValueDictionary 中?
【发布时间】:2013-11-07 04:39:50
【问题描述】:

我是 Asp.net 的新手。我喜欢通过视图传递实体的 id 来编辑控制器中的方法。这是我的代码。

#
@model IEnumerable<Login.DAL.tabLogin>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>

<p>
@Html.ActionLink("Create New", "Create")
</p>
<div id="work_area">
</div>
<table>
<tr>
    <th>
        Username
    </th>
    <th>
        Password
    </th>
    <th>
        Email
    </th>
    <th></th>
</tr>
@foreach (var item in Model) {
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.Username)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Password)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Email)
    </td>
    <td>
        <a href="javascript:editUser(@item.UserID)">Edit</a>|
        @Html.ActionLink("Details", "Details", new { id=item.UserID }) |
        @Html.ActionLink("Delete", "Delete", new { id=item.UserID })
    </td>
</tr>
}
</table>
<script type="text/javascript" language="javascript">

function editUser(idval) {
    alert(idval);
    $('#work_area').load('@Url.Action("Edit","Home", new RouteValueDictionary(new { id = idval}))');
}
</script>

我没有得到正确的功能。

$('#work_area').load('@Url.Action("Edit","Home", new RouteValueDictionary(new { id = 1}))');

如果我像上面那样对 id 值进行硬编码,它会按预期工作。请帮我解决这个问题。

【问题讨论】:

  • 没有获得正确的功能是什么意思?当您单击编辑时,当前代码中发生了什么?
  • 它将相应的记录传递给编辑方法,内容将准备好进行编辑。为此,我正在传递当前记录的 id。它应该在 div 'work_area' 中得到更新。我希望我解释正确..

标签: c# javascript asp.net asp.net-mvc asp.net-mvc-4


【解决方案1】:

问题在于您正在混合使用 Razor 和 JavaScript,并且不了解在何时何地发生了什么。代码行:

$('#work_area').load('@Url.Action("Edit","Home", new RouteValueDictionary(new { id = 1}))');

将在呈现 javascript 之前呈现为完整的 URL。这意味着,一旦页面被浏览器加载,那行已经说:

$('#work_area').load('http://example.com/home/edit/1');

并且永远不会基于javascript而改变。要将 javascript 参数添加到您的 URL 中,您必须将 Razor 中的 URL 与 javscript 参数结合起来。尝试类似:

function editUser(idval) {
    alert(idval);
    var baseUrl = '@Url.Action("Edit","Home")';
    $('#work_area').load(baseUrl + '/' + idval);
}

【讨论】:

  • 我们不能传递函数参数而不是1吗?
  • @arockia 您无法访问剃刀代码中的 javascript 变量(函数参数),因为在 Razor 执行完成后,Razor 是在服务器端执行的,而 javascript 是在客户端执行的。请参阅我的代码编辑以将 Razor 呈现的 URL 存储到 javascript 变量中并附加 idval
  • 谢谢@xdumaine。得到你的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-22
  • 1970-01-01
  • 2018-09-15
  • 2015-11-13
  • 2022-06-23
  • 1970-01-01
相关资源
最近更新 更多