我有一个循环,为每个条目创建一个按钮。但是,我需要为按钮设置动态ID以便在按钮点击时使用它并知道所选条目。
我的控制器从数据库中检索条目列表并使用" ViewBag.List",我添加了按钮。来自数据库的列表包括ID,标题和描述。
这是view / Index.cshtml
@model Exams.Models.subjects
@{
ViewBag.Title = "Subjects"
}
<h2> Current Subjects </h2>
<form method="post" action="@Url.Action("Submit")" >
<table>
@foreach(var subject in ViewBag.List){
<tr>
<td>
@subject.Title </br>
@subject.Desc
</td>
<td>
<button name="Submit"> Submit </button>
<td>
<tr>
}
</table>
单击按钮后,下一个视图必须包含 &#34;你刚刚注册了#34; + SubjectTitle
如何包括主题标题?知道简单的ViewBag通过引用保存SubjectTitle
答案 0 :(得分:0)
3件事,
1)您需要将click事件附加到按钮。
2)在点击的处理程序中使用$(this).parent().prev()
来定位前一个td元素。
3)获取td html,在发生br时拆分并获得仅获取标题的第一个元素。
$('table button').click(function(){
var titleanddesc = $(this).parent().prev().html();
alert(titleanddesc.split('<br>')[0]);
});
<强> Working Demo 强>
答案 1 :(得分:0)
使用视图模型来保存您的数据。查看模型很棒。 Here are a few reasons why.
public class SubjectsViewModel {
public IEnumerable<Subject> Subjects { get; set; }
}
使用您正在使用的任何控制器代码来填充ViewBag.List
以填充Subjects
,并使用SubjectsViewModel
返回视图,例如:
public ActionResult Subjects() {
var model = new SubjectsViewModel();
model.Subjects = db.Subjects;
return View(model);
}
您的新观点:
@model Exams.ViewModels.SubjectsViewModel
@{
ViewBag.Title = "Subjects"
}
<h2> Current Subjects </h2>
@using (Html.BeginForm())
{
<table>
@foreach(var subject in Model.Subjects){
<tr>
<td>
@subject.Title</br>
@subject.Desc
</td>
<td>
<input name="submit" value='@subject.id'> Submit </button>
</td>
<tr>
}
</table>
}
从我改变的HTML中,我会假设你并没有大量使用Razor。 You can read up on Razor here.
然后您可以使用控制器执行此操作:
[HttpPost]
public ActionResult Subjects(string submit) {
return RedirectToAction("SubjectInfo", new { subjectid = submit });
}
这告诉控制器传递您命名为&#39;提交&#39;的按钮的值。如果要重命名,只需在POST
控制器操作中更改输入名称和参数。
答案 2 :(得分:0)
您可以通过这种方式将动态ID设置为按钮
@foreach (var objBook in ((List<Student>)ViewBag.List).Select((x, i) => new { Data = x, Index = i }))
{
<tr>
<td>
@objBook.Data.Title
</td>
<td>
<button name="Submit" id="btnSubmit_" + @objBook.Index> // append Index to Id
Submit
</button>
</td>
</tr>
}
答案 3 :(得分:0)
Please try with this.
<form method="post" action="@Url.Action("Submit")" >
<table>
@foreach(var subject in ViewBag.List){
<tr>
<td>
@subject.Title </br>
@subject.Desc
</td>
<td>
<button name="Submit" " id="btnsubmit-@subject.id" > Submit
</button>
</td>
<tr>
}
</table>