再试一次:无法在ProDinner ViewModel中编辑嵌套对象

时间:2012-05-30 18:22:58

标签: asp.net-mvc-3 prodinner

在我的ChefInput ViewModel中,我有:

public class ChefInput : Input <-- base class has Id property
{
    public int PersonId { get; set; }
    public Person Person { get; set; }
}

在我的Person域类中,我有:

public class Person : DelEntity <-- base class has Id property
{
  public string FirstName { get; set; }
  public string LastName { get; set; }
}

在Chef Create /(也编辑)视图中我有:

@Html.HiddenFor(x => x.Id) <-- Id comes from Input base class
@Html.TextBoxFor(x => x.PersonId) <- Just here to see if Id shows up in form
@Html.EditorFor(x => x.Person, "Common/Person")    

在我的自定义Person EditorTemplate(EditorTemplates'文件夹的'Common'子文件夹)中,我有:

            <div class="efield" style="width: 100%;">
                <div class="elabel_left">First Name:</div>                    
                @Html.TextBoxFor(x => x.FirstName, new { @class = "einput" })                         
                @Html.ValidationMessageFor(x => x.FirstName)
            </div>

            <div class="efield" style="width: 100%;">
                <div class="elabel_left">Last Name :</div>                    
                @Html.TextBoxFor(x => x.LastName, new { @class = "einput" })                         
                @Html.ValidationMessageFor(x => x.LastName)
            </div>

我的厨师控制器完全不受ProDinner的影响:

public class ChefController : Cruder<Chef, ChefInput>
{
    public ChefController(ICrudService<Chef> s, IMapper<Chef, ChefInput> v) : base(s, v)
    {  }
}

结果:

  1. 我可以创建一个人并将该PersonId分配给Chef的表记录。
  2. 单击编辑时(再次在ProDinner中仍然是创建页面),First / Last名称文本框为空,但PersonId文本框值正确显示。
  3. 观察:

    在调试时,在(获取)编辑方法的Crudere文件中,对于这行代码:

     var entity = CrudSvc.Get(id);
    

    我的调试器显示:    PERSONID:1    人:null

    再次使用呈现的编辑页面,其中包含两个用于名/姓的空文本框。

    最终评论:

    1. 我今年刚开始学习MVC。
    2. 上个月刚刚开始学习ProDinner。
    3. 我是否需要将PersonId参数传递给Person Editor模板?如果是这样,我该怎么做?
    4. 我知道我可以为Person类型为Chef创建原始类型,但我想减少代码,我改变的ProDinner应用程序可能想在其他类(例如用户/主机等)上使用那些Person类型,所以对我来说正确的事情将所有共性隔离到一个类,只是将它们嵌套在相应的视图模型中。

      如果你知道一个解决方案,请回答假设我绝对是非专家。所以请,没有简洁的评论,或链接到其他网站。如果你认为我做错了什么,我尊重你给我打电话,但请跟进一个更好的方法的例子。

      谢谢。

      PS:我已经承诺使用ProDinner的依赖结构,因此可以理解该框架内的解决方案。

0 个答案:

没有答案