gpt4 book ai didi

c# - 使用 EditorTemplates 和单选按钮

转载 作者:太空宇宙 更新时间:2023-11-03 12:17:44 25 4
gpt4 key购买 nike

我以表格格式显示数据。使用 EditorFor 和 EditorTemplates 时会自动生成表格。

在表格的每一行中,我都显示了 ID、姓名、国家/地区下拉列表、用于选择爱好的复选框和用于选择性别的单选按钮。

一切正常,但我无法为性绑定(bind)单选按钮。我无法理解我所缺少的错误。

请查看我的代码并指导我更改单选按钮的内容。

我的完整代码

Controller 代码

    public class HomeController : Controller
{
public ActionResult Index()
{
StudentListViewModel osvm = new StudentListViewModel();
osvm.Sex = osvm.GetSex();
osvm.Countries = osvm.GetCountries();
return View(osvm);
}

[HttpPost]
public ActionResult Index(StudentListViewModel oStudentListViewModel)
{
return View(oStudentListViewModel);
}
}

View 模型

public class StudentListViewModel
{
//public List<Country> Country { get; set; }
public List<SelectListItem> Countries { get; set; }

public IList<Student> Students { get; set; }
public List<Sex> Sex { get; set; }

public StudentListViewModel()
{
Students = new List<Student>
{
new Student
{
ID=1,Name="Keith",CountryID="0",SexID="F",
Hobbies= new List<Hobby>
{
new Hobby{ID=1,Name="Football",Checked=true},
new Hobby{ID=2,Name="Hocky",Checked=false},
new Hobby{ID=3,Name="Cricket",Checked=false}
}

},

new Student
{
ID=2,Name="Paul",CountryID="2",
Hobbies= new List<Hobby>
{
new Hobby{ID=1,Name="Football",Checked=false},
new Hobby{ID=2,Name="Hocky",Checked=true},
new Hobby{ID=3,Name="Cricket",Checked=false}
}
},

new Student
{
ID=3,Name="Sam",CountryID="3",
Hobbies= new List<Hobby>
{
new Hobby{ID=1,Name="Football",Checked=false},
new Hobby{ID=2,Name="Hocky",Checked=false},
new Hobby{ID=3,Name="Cricket",Checked=true}
}
}
};
}

public List<Sex> GetSex()
{
Sex = new List<Sex>
{
new Sex{ID="M",SexName="Male"},
new Sex{ID="F",SexName="Female"}
};

return Sex;
}

public List<SelectListItem> GetCountries()
{
Countries = new List<SelectListItem>
{
new SelectListItem{Value="1",Text="India"},
new SelectListItem{Value="2",Text="UK"},
new SelectListItem{Value="3",Text="USA"}
};

return Countries;
}
}

模型类

   public class Student
{
public int ID { get; set; }
public string Name { get; set; }
public string CountryID { get; set; }
public string SexID { get; set; }
public IList<Hobby> Hobbies { get; set; }

}

public class Hobby
{
public int ID { get; set; }
public string Name { get; set; }
public bool Checked { get; set; }
}

public class Sex
{
public string ID { get; set; }
public string SexName { get; set; }
}

主视图Index.cshtml

@model EditorTemplateSample.Models.StudentListViewModel

@{
ViewBag.Title = "Home Page";
}
<br /><br />
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
<div class="form-group">
<div class="col-md-12 table-responsive">
<table class="table table-bordered table-hover">
<tr>
<th>
ID
</th>
<th>
Name
</th>
<th>
Country
</th>
<th>
Hobbies
</th>
<th>
Sex
</th>
</tr>
<tbody>
@Html.EditorFor(m => m.Students, new { Countries = Model.Countries, Sex = Model.Sex })
</tbody>
</table>
</div>
</div>
}

EditorTemplates\Student.cshtml

@model EditorTemplateSample.Models.Student
<tr>
<td>
@Html.HiddenFor(m => m.ID)
@Html.DisplayFor(m => m.ID)
</td>
<td>
@Html.TextBoxFor(m => m.Name)
</td>
<td>
@Html.DropDownListFor(m => m.CountryID,
new SelectList((List<SelectListItem>)ViewData["Countries"], "Value", "Text", Model.CountryID), "-- Select Country--")
<td>
<td>
@Html.EditorFor(m => m.Hobbies)
<td>
<td>
@Html.EditorFor(m => ((EditorTemplateSample.Models.Sex) ViewData["Sex"]).ID)
<td>
</tr>

EditorTemplates\Hobby.cshtml

@model EditorTemplateSample.Models.Hobby

<div class="checkbox">
@Html.HiddenFor(m => m.ID)
@Html.HiddenFor(m => m.Name)
@Html.CheckBoxFor(m => m.Checked)
@Html.LabelFor(m => m.Checked, Model.Name)
</div>

EditorTemplates\Sex.cshtml

@model EditorTemplateSample.Models.Sex
<td>
<div class="checkbox">
@Html.HiddenFor(m => ((EditorTemplateSample.Models.Sex)ViewData["Sex"]).ID)
@Html.HiddenFor(m => ((EditorTemplateSample.Models.Sex)ViewData["Sex"]).SexName)
@Html.RadioButtonFor(m => ((EditorTemplateSample.Models.Sex)ViewData["Sex"]).ID, ((EditorTemplateSample.Models.Sex)ViewData["Sex"]).ID)
@Html.LabelFor(m => ((EditorTemplateSample.Models.Sex)ViewData["Sex"]).ID, ((EditorTemplateSample.Models.Sex)ViewData["Sex"]).SexName)
</div>
</td>

@Html.EditorFor(m => m.Students, new { Countries = Model.Countries, Sex = Model.Sex })以上方式我将性模型数据传递给 Student.cshtml 文件

我尝试从 Student.cshtml 文件绑定(bind) ID @Html.EditorFor(m => ((EditorTemplateSample.Models.Sex) ViewData["Sex"]).ID)

在EditorTemplates\sex.cshtml文件中

@model EditorTemplateSample.Models.Sex
<td>
<div class="checkbox">
@Html.HiddenFor(m => ((EditorTemplateSample.Models.Sex)ViewData["Sex"]).ID)
@Html.HiddenFor(m => ((EditorTemplateSample.Models.Sex)ViewData["Sex"]).SexName)
@Html.RadioButtonFor(m => ((EditorTemplateSample.Models.Sex)ViewData["Sex"]).ID, ((EditorTemplateSample.Models.Sex)ViewData["Sex"]).ID)
@Html.LabelFor(m => ((EditorTemplateSample.Models.Sex)ViewData["Sex"]).ID, ((EditorTemplateSample.Models.Sex)ViewData["Sex"]).SexName)
</div>
</td>

指导我如何将我的性别数据从主索引 View 传递到 EditorTemplates 文件夹中的性别 View 。

编辑

在主视图中我添加了这一行

@Html.EditorFor(m => m.Students, new { Countries = Model.Countries, MainModel = Model, Sex = Model.Sex })

在 student.cshtml 中,我编辑像 @Html.EditorFor(m => ((EditorTemplateSample.Models.StudentListViewModel)ViewData["MainModel"]).Sex, new { Sex = (List<EditorTemplateSample.Models.Sex>)ViewData["Sex"] }) 这样的行

在生成单选按钮的 sex.cshtml 中,我更改了喜欢的行

<div class="checkbox">
@Html.HiddenFor(m => m.ID)
@Html.HiddenFor(m => m.SexName)
@Html.RadioButtonFor(m => m.ID,Model.ID)
@Html.LabelFor(m => m.ID, Model.SexName)
</div>

但仍然没有运气。由于缺乏对 asp.net mvc EditorTemplates 的控制而严重卡住,现在单选按钮即将出现,但默认情况下都被选中,这是错误的。查看最新的用户界面。

enter image description here

请帮我解决这个问题。谢谢

最佳答案

您的 Student 类包含一个属性 string SexID,这是您要将所选单选按钮值绑定(bind)到的属性。但是您的 EditorTemplate 适用于类型为 Sex 的模型,而您的 Student 模型不包含类型为 Sex< 的属性(也不应该)。

在这种情况下使用 EditorTemplate 是没有意义的 - 您绑定(bind)到一个简单的属性,而不是一个复杂的对象或对象集合。单选按钮应该在您的 Student.cshtml 模板中生成。

@model EditorTemplateSample.Models.Student
<tr>
<td>
@Html.HiddenFor(m => m.ID)
@Html.DisplayFor(m => m.ID)
</td>
<td>@Html.TextBoxFor(m => m.Name)</td>
<td>@Html.DropDownListFor(m => m.CountryID, new SelectList((List<SelectListItem>)ViewData["Countries"], "Value", "Text", Model.CountryID), "-- Select Country--")</td>
<td>@Html.EditorFor(m => m.Hobbies)</td>
<td>
@foreach(var sex in (List<Sex>)ViewData["Sex"])
{
<label>
@Html.RadioButtonFor(m => m.SexID, sex.ID, new { id = "" })
<span>@sex.SexName</span>
</label>
}
</td>
</tr>

关于c# - 使用 EditorTemplates 和单选按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48989710/

25 4 0
文章推荐: php - 用于处理访客数据的 Mongodb Schema
文章推荐: Python 类 : Variable subclass creation in the base class's methods
文章推荐: php - 带有
  • Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com