我是MVC的新手。我无法弄清楚如何将可以具有不同类型的属性绑定到radiobuttons,例如:
public class Job { public string Name { get; set; } }
public class Carpenter : Job { }
public class Unemployed : Job { }
public class Painter : Job { }
public class Person
{
public Person() { this.Job = new Unemployed(); }
public Job Job { get; set; }
}
那是;一个人有某种工作。现在我希望有一个用户可以为一个人选择工作的视图。我想使用radiobuttons来显示所有可用的工作类型。我也希望当前的工作类型被选为默认值,当然我希望这个人在回发时更新她的工作类型。我正在尝试使用Razor。你会怎么做?
答案 0 :(得分:1)
我会有一个string
模型属性,其中包含作业类型的标识符:
public class EmployeeViewModel
{
public string JobType { get; set; }
}
然后,您可以在视图中创建一组radiobuttons,其中值是所有可用的作业类型。然后,使用工厂类:
public static class JobFactory
{
public Job GetJob(string id)
{
switch (id)
{
case "CA":
return new Carpenter();
...
}
}
}
然后您可以在控制器中调用它:
public ActionResult MyAction(EmployeeViewModel m)
{
var person = new Person();
person.Job = JobFactory.GetJob(m.JobType);
...
}
您也可以通过切换枚举的字符串ID并在视图中使用RadioButtonListFor
来获益。这里有一个答案可以证明这一点:
https://stackoverflow.com/a/2590001/1043198
希望这有帮助。