3

我是 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 值进行硬编码,它会按预期工作。请帮助我。

4

1 回答 1

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);
}
于 2013-10-28T12:11:31.127 回答