C# 如何将id从razor视图传递到控制器';ASP.NETMVC中的动作方法?
那么,我的第一个演示MVC项目有什么困扰我的呢。在我的主视图MyAction.cshtml中,当您单击学生用户名超链接时,包含学生详细信息的部分视图将呈现在StudentDetailsC# 如何将id从razor视图传递到控制器';ASP.NETMVC中的动作方法?,c#,jquery,ajax,asp.net-mvc,razor,C#,Jquery,Ajax,Asp.net Mvc,Razor,那么,我的第一个演示MVC项目有什么困扰我的呢。在我的主视图MyAction.cshtml中,当您单击学生用户名超链接时,包含学生详细信息的部分视图将呈现在StudentDetails中 以下是我的主要观点: @model IEnumerable<MvcApplication4.ViewModels.StudentViewModel> @{ ViewBag.Title = "MyAction"; Layout = "~/Views/Shared/_myTempla
中
以下是我的主要观点:
@model IEnumerable<MvcApplication4.ViewModels.StudentViewModel>
@{
ViewBag.Title = "MyAction";
Layout = "~/Views/Shared/_myTemplateLayoutPage.cshtml";
}
<script>
function RegisterClickHanders() {
var url = '@Url.Action("DisplayClickedView","Private")';
$('.editDetails').click(function () {
var btnvalue = $('.editDetails').attr("value");
var srchvalue = $(this).closest("tr").children().first().text();
$('#Add_Update_Details').load(url, { searchText: btnvalue, searchValue: srchvalue });
});
}
</script>
<div id="content">
<div id="mainpage">
<h2>Registration Details</h2>
<ul>
@foreach(var item in Model)
{
<li>
@Ajax.ActionLink(item.UserName,
"GetUserDetails",
new { id = item.Student.StudentId },
new AjaxOptions
{
UpdateTargetId = "StudentDetails",
InsertionMode = InsertionMode.Replace,
HttpMethod = "GET",
OnComplete="RegisterClickHanders"
}
)
</li>
}
</ul>
<div id ="StudentDetails"></div>
<div id ="Add_Update_Details"></div>
</div>
<div id="sidebarbottom"></div>
</div>
但是我只在视图中显示StudentFullName、UserName和DepartmentName
[HttpGet]
public PartialViewResult GetUserDetails(int? id)
{
StudentContext context = new StudentContext();
var result = context.Students.Where(s => s.StudentId == id)
.Include(s => s.Department)
.Select(s => new StudentViewModel
{
Student = s,
UserName = s.UserName,
DepartmentName = s.Department.DepartmentName
}).First();
return PartialView("_StudentDetails",result);
}
但是当点击编辑细节按钮时,我希望为该记录呈现一个视图。我想做的是:
var url = '@Url.Action("DisplayClickedView","Private")';
$('.editDetails').click(function () {
var btnvalue = $('.editDetails').attr("value");
var srchvalue = $(this).closest("tr").children().first().text();
$('#Add_Update_Details').load(url, { searchText: btnvalue, searchValue: srchvalue });
});
但这将在srchvalue中获得StudentFullName,并基于此渲染局部视图。但我希望它是基于视图中不存在的StudentId本身进行渲染的。
如何将StudentId传递给action DisplayClickedView,以便根据id本身进行更新或编辑?
<input type="hidden" name="id" value="@Model.Id" />
将学生ID
添加到视图模型中。然后,您可以通过razor将href
添加到按钮中,razor包含学生id:
@model MvcApplication4.ViewModels.StudentViewModel
<h2>Student Details</h2>
<table border="1">
<tr>
<th>
Name
</th>
<th>
User Name
</th>
<th>
Department
</th>
<th colspan="2">
Actions
</th>
</tr>
<tr>
<td>
@Html.DisplayFor(x => x.StudentFullName)
</td>
<td>
@Html.DisplayFor(x => x.UserName)
</td>
<td>
@Html.DisplayFor( x => x.DepartmentName)
</td>
<td>
<a class="btn btn-default btn-sm" href="@Url.Content(~/Controller/Action")/@(x => x.StudentID)" type="submit">Edit</a>
</td>
<td>
<a class="btn btn-default btn-sm" href="@Url.Content(~/Controller/Action")/@(x => x.StudentID)" type="submit">Add Details</a>
</td>
</tr>
</table>
@model mvcapapplication4.ViewModels.StudentViewModel
学生资料
名称
用户名
部门
行动
@DisplayFor(x=>x.StudentFullName)
@DisplayFor(x=>x.UserName)
@DisplayFor(x=>x.DepartmentName)
其中控制器和操作被替换为控制器和操作。当我想在html属性中有一些值并在javascript中访问它时,我喜欢使用该属性 所以,你可以这样做:
并将其放入javascript中:
var studentId = $('.editDetails').data("student-id");
这样,您就不必在表中添加新的“隐藏”列,也不必更改按钮的默认属性。您能展示一下吗?我不明白如果学生ID不在桌子上,我怎么能得到它。
@model MvcApplication4.ViewModels.StudentViewModel
<h2>Student Details</h2>
<table border="1">
<tr>
<th>
Name
</th>
<th>
User Name
</th>
<th>
Department
</th>
<th colspan="2">
Actions
</th>
</tr>
<tr>
<td>
@Html.DisplayFor(x => x.StudentFullName)
</td>
<td>
@Html.DisplayFor(x => x.UserName)
</td>
<td>
@Html.DisplayFor( x => x.DepartmentName)
</td>
<td>
<a class="btn btn-default btn-sm" href="@Url.Content(~/Controller/Action")/@(x => x.StudentID)" type="submit">Edit</a>
</td>
<td>
<a class="btn btn-default btn-sm" href="@Url.Content(~/Controller/Action")/@(x => x.StudentID)" type="submit">Add Details</a>
</td>
</tr>
</table>
var studentId = $('.editDetails').data("student-id");