如何将IEnumerable对象或数据从视图传递到控制器?

3
我创建了一个强类型视图。我想从视图传递IEnumerable对象或数据到控制器。以下是我的模型控制器视图
我的模型:
public class UserDetailsClass
{
    public static FeedbackDatabaseDataContext context = new FeedbackDatabaseDataContext(); 
    public class Tablefields
    {
        [Key]
        public  int ID { get; set; }

        [Required(ErrorMessage = "Email is required")]            
        public  string EmailID { get; set; }

        [Required(ErrorMessage="Password is required")]
        public string Password { get; set; }

        [Required(ErrorMessage = "First Name is required")] 
        public  string FirstName { get; set; }

        [Required(ErrorMessage = "Last Name is required")] 
        public string  LastName { get; set; }
    }
    public static List<UserDetails> getalluser()
    {
        var lst = (from r in context.UserDetails select r);
        return lst.ToList();        
    }
 }

我的控制器
 public ActionResult Test()
    {

        IList<UserDetailsClass.Tablefields> viewmodel = new List<UserDetailsClass.Tablefields>();
        var q = UserDetailsClass.getalluser().ToList();

        foreach (SQLOperation.Models.UserDetails item in q)
        {
            UserDetailsClass.Tablefields viewItem = new UserDetailsClass.Tablefields();

            viewItem.EmailID = item.Email;
            viewItem.FirstName = item.FirstName;
            viewItem.LastName = item.LastName;
            viewItem.Password = item.Password;

            viewmodel.Add(viewItem);
        }
        return View(viewmodel);
    }

    [HttpPost]
    public ActionResult Test(IEnumerable<UserDetailsClass.Tablefields> items)
    {
        return View();
    }

我的观点:
@model  IEnumerable<SQLOperation.Models.UserDetailsClass.Tablefields>

@{
    ViewBag.Title = "Test";
 }

 <h2>Test</h2>

@using (Html.BeginForm())
{
<table>
<tr>
    <th>
        EmailID
    </th>
    <th>
        Password
    </th>
    <th>
        FirstName
    </th>
    <th>
        LastName
    </th>
    <th></th>
</tr>

@foreach (var item in Model)
{
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.EmailID)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Password)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.FirstName)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.LastName)
    </td>
   </tr> 
   }
</table>
  <input  type="submit" value="submit" />     
}

我在 items 中没有得到任何值。当我在它上面设置断点时,它显示 NULL items 中。我完全困惑了如何将值传递给 controller
谢谢, Amol
2个回答

1

不要使用@Html.DisplayFor,而是使用@Html.EditorFor,这样数据绑定将在表单中发生。

另外,由于您正在使用集合,因此需要迭代您的字段(简化示例):

                    @for (int row = 0; row < Model.Count; row++)
                    {
                            @Html.EditorFor(x => x[row].FirstName )

                    }

谢谢, 我已经将Html.DisplayFor更改为Html.EditorFor,但是我无法在控制器中获取值。它返回NULL。 - Amol
已编辑以反映您正在发送集合。 - Eduard
我在上面的 x=>x[row].FirstName 部分遇到了错误,所以我将其更改为以下内容。但是在控制器中仍然没有得到任何值。@for(int row = 0; row < Model.Count(); row++){ @Html.EditorFor(x => x.ElementAt(row).FirstName)} - Amol
我在 Model 中获取了值,但没有返回给控制器。 - Amol

-1
 @for (int i = 0; i < Model.length; i ++)
 {
 <tr>
    <td>
        @Html.DisplayFor(model => Model[i].EmailID)
    </td>
     <td>
        @Html.DisplayFor(model => Model[i].Password)
     </td>
     <td>
          @Html.DisplayFor(model => Model[i].FirstName)
     </td>
     <td>
        @Html.DisplayFor(model => Model[i].LastName)
     </td>
     </tr> 
   }
 </table>
      <input  type="submit" value="submit" />     
 }

谢谢,我在我的视图中得到了数值,但是我无法将它传递给我的控制器。在我的控制器中,我得到了NULL。 - Amol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接