我想做的是相当基本的,但我可能把事实弄混了。我有一个详细信息页面,它有一个自定义类作为模型。自定义类将2个自定义对象与另一个自定义对象(2个对象中的一个属性)一起使用。详细信息页面输出了大量信息,但允许用户发表评论。当用户单击“发布”按钮时,页面将被发布到类似以下内容的详细信息操作:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Details(VideoDetailModel vidAndComment) { ....}
表单上唯一发布的字段是CommentText和VideoID。这是视频细节模型的样子。
public class VideoDetailModel
{
public VideoDetailModel()
{
Video = new VideoDTO();
Comment = new CommentDTO();
}
public VideoDetailModel(VideoDTO vid)
{
Video = vid;
Comment = new CommentDTO();
}
public VideoDTO Video { get; set; }
public CommentDTO Comment { get; set; }
}
videodto有一些属性,但我需要的是videoid。commentdto的相关属性包括commenttext(正确发布)和userdto对象(包含userid属性)。除了commentText值以外的所有内容都不会发布。我在ascx页面上也有下面一行,但是模型值永远不会发布到控制器。
Html.Hidden("Model.Video.VideoId", Model.Video.VideoId);
我真的不知道我在这里遗漏了什么。我想如果我为我需要的属性添加更多的表单字段,它们就会被发布,但是我只需要一个表单条目字段作为注释文本。如果我能得到相同的模型对象值,这些值被发送到页面,以便与页面一起发布,那将是有帮助的。
我很乐意在此澄清任何需要的问题。我对所发生的事一无所知。
更新
好的,看起来解决方案相当简单。我认为在表单中间使用renderpartial在某种程度上对如何用HTML编写表单是有问题的。我不能确定为什么会出现问题,但是如果我在窗体前执行renderparties,然后以文本输入字段和隐藏的videoid开始窗体,那么默认的modelbinder就可以正常工作了。我开始创建表单,编写隐藏的videoid,呈现几个部分视图,创建我的commenttext字段,然后关闭表单。CommentText字段将被绑定。隐藏的videoid不会。也许我错过了使用renderpartial的规则。
为了完整性,我呈现的部分视图获取了一个注释对象,并刚刚写出了它的注释文本数据。对于单个视频对象,这些对象中的一些将存在。所有这些数据都是自定义类型的,并作为模型传递到视图(主视图)中。此部分视图没有窗体,也没有任何数据输入字段。