【发布时间】:2016-08-12 12:02:13
【问题描述】:
我正在观看一个教程视频,https://www.youtube.com/watch?v=04RY04uKq2s,但我只是不明白 RadioButtonFor 发生了什么。
基本上,这家伙创建了一个 Company 类:
public class Company
{
public string SelectedDepartment {get; set;}
public List<Department> Departments
{
get
{
SampleDBContext db = new SampleDBContext();
return db.Departments.ToList();
}
}
}
`
好的,很简单。他这里使用了EntityFramework,它已经生成了SampleDBContext类。
然后他有一个很简单的Index ActionMethod:
[HttpGet]
public ActionResult Index()
{
Company company = new Company();
return View();
}
此 [HttpGet] 的强类型视图:
@using (Html.BeginForm())
{
foreach (var department in Model.Departments)
{
@Html.RadioButtonFor(m => m.SelectedDepartment, department.Id, (department.IsSelected.HasValue && department.IsSelected.Value) ? new (@checked = "checked")} : null
@department.Name
}
<input type="submit" value="Submit" />[Resulting View][1]
最后是这个 HttpPost ActionMethod:
[HttpPost]
public string Index(Company company)
{
if(string.IsNullOrEmpty(company.SelectedDepartment)
{
return "You selected nothing";
}
else
{
return "You selected department id: " + company.SelectedDepartment;
}
好的,哇。数据库有 3 列,Id、Name 和 IsSelected(位类型)。
所以, 1..人力资源..1 2..工资单..NULL 3..IT..NULL
长篇大论?我希望不是。每件作品都非常直截了当。
现在回答我的问题:
(1)RadioButtonFor()如何使用(m=>m.SelectedDepartment)?如题,为什么 [HttpPost] 方法会检查它的字符串是空还是空?
(2)当你在方法中打印出company.SelectedDepartment的值时,你就得到了ID。这项任务在哪里进行?
【问题讨论】:
-
这段代码大部分都是废话或不好的做法,包括在类中访问数据库,在 GET 方法中初始化一个新对象但不将其返回给视图,以及在
RadioButtonFor()用于方法(它的值SelectedDepartment决定选择什么,它应该只是@Html.RadioButtonFor(m => m.SelectedDepartment, department.Id))。 -
第一个参数是你绑定到的属性(
SelectedDepartment),第二个参数是value(在这种情况下是department.Id)所以当你选择说第二个单选按钮时例如5的值,然后在您提交时5绑定到SelectedDepartment -
@StephenMuecke 我意识到这不是最佳实践。这些教程实际上只是演示性的。显然,多层方法更好。
-
@StephenMuecke 是的,现在正在清理。
标签: c# asp.net-mvc