如何设置和获取循环中创建的按钮的ID?

时间:2015-02-24 12:45:41

标签: c# jquery html asp.net-mvc razor

我有一个循环,为每个条目创建一个按钮。但是,我需要为按钮设置动态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

4 个答案:

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