我在主视图中渲染了一个PartialView
查看:
@model FullProductViewModel
...
<div class="send-container">
@Html.Partial("_CommentForm", new CommentViewModel { ProductId = Model.Id, Title = "" , Context="" })
</div>
...
我有一个名字&#34;标题&#34;在我的两个班级&#34; FullProductViewModel&#34;和&#34; CommentViewModel&#34;。
_CommentForm PartialView:
@model CommentViewModel
<p class="page-title">@Resources.SendComment</p>
@using (Html.BeginForm("Comment", "Home", FormMethod.Post, new { @class = "form-comment form-submit" }))
{
@Html.AntiForgeryToken()
<div class="input-group">
@Html.LabelFor(model => model.Title)
@Html.ValidationMessageFor(model => model.Title, "", new { @class = "text-danger" })
@Html.EditorFor(model => model.Title, new { htmlAttributes = new { @class = "form-control" } })
</div>
<div class="input-group">
@Html.LabelFor(model => model.Context)
@Html.ValidationMessageFor(model => model.Context, "", new { @class = "text-danger" })
@Html.TextAreaFor(model => model.Context, htmlAttributes: new { @class = "form-control", rows = "8" })
</div>
<div class="input-group">
@Html.LabelFor(model => model.CaptchaCode)
@Html.ValidationMessageFor(model => model.CaptchaCode, "", new { @class = "text-danger" })
@Html.EditorFor(model => model.CaptchaCode, new { htmlAttributes = new { @class = "form-control" } })
</div>
<div class="captcha-wrapper">
<img alt="Captcha" id="imgcaptcha" src="@Url.Action("Captcha", "Captcha")" />
</div>
<button class="btn btn-submit" type="submit">@Resources.SendMessage</button>
}
问题是&#34;标题&#34;在PartialView内部采用其值形式&#34; FullProductViewModel&#34;模型但不是&#34; CommentViewModel&#34;。我可以轻松更改字段名称&#34;标题&#34;在其中一个解决问题的模型中......但是为什么会发生这种情况以及如何在没有更改字段名称的情况下修复它?
答案 0 :(得分:1)
您的Title
媒体资源与您视图中的@{ ViewBag.Title = "..
代码行相冲突(ViewBag
文件使用_Layout.cshtml
代码来设置全局{{1}页面的属性)。
生成表单控件的所有<title>
方法通过检查(按顺序)设置HtmlHelper
value
ModelState
(ViewDataDictionary
或ViewData
)在您的情况下,ViewBag
没有添加任何内容。但是因为ModelState
的值已添加到Title
,因此该值用于文本框的值。该方法永远不会读取您在模型中设置的实际值。
唯一现实的选择(除非您想修改ViewDataDictionary
中的代码以及使用它的所有视图)是更改属性的名称。