Partialview中的输入从主模型

时间:2018-02-03 13:50:09

标签: asp.net-mvc

我在主视图中渲染了一个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;在其中一个解决问题的模型中......但是为什么会发生这种情况以及如何在没有更改字段名称的情况下修复它?

1 个答案:

答案 0 :(得分:1)

您的Title媒体资源与您视图中的@{ ViewBag.Title = "..代码行相冲突(ViewBag文件使用_Layout.cshtml代码来设置全局{{1}页面的属性)。

生成表单控件的所有<title>方法通过检查(按顺序)设置HtmlHelper

  1. value
  2. ModelStateViewDataDictionaryViewData
  3. models属性的值
  4. 在您的情况下,ViewBag没有添加任何内容。但是因为ModelState的值已添加到Title,因此该值用于文本框的值。该方法永远不会读取您在模型中设置的实际值。

    唯一现实的选择(除非您想修改ViewDataDictionary中的代码以及使用它的所有视图)是更改属性的名称。