共享视图错误“传入字典的模型项的类型为...,但此字典需要System.String类型的模型项”

时间:2012-10-08 18:53:40

标签: asp.net-mvc

我是Asp.net mvc 4开发中的新手,我已经开发了多年的webforms,现在我开始用mvc开发,我遇到了一些问题

在我的新项目中,我需要使用MarkdownEditor,我已将其封装在SharedView中,以便在我的视图中重复使用它(如在Webforms中创建Web用户控件)

使用markdown编辑器的共享视图的代码是:

@model string

<div id="markdown-editor">
    <div class="wmd-panel">
        <div id="wmd-button-bar"></div>
            @Html.TextArea("m_wmdinput", @Model, new { @class="wmd-input" })
        </div>
    <div id="wmd-preview" class="wmd-panel wmd-preview"></div>
</div>
<script>
     ....
     ....

这是我将其用作Render.PartialView。

的示例
@model MyProject.Models.PostIt

@using (Html.BeginForm()) {

    <fieldset>
        <legend>PostIt</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.PublishingDate)
            @Html.EditorFor(model => model.PublishingDate)
            @Html.ValidationMessageFor(model => model.PublishingDate)
        </div>

        @Html.Partial("MarkdownEditor", @Model.Content)

        <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset>
}

型号代码为:

public class PostIt
{
    public int ID { get; set; }
    public string Content { get; set; }
    public DateTime PublishingDate { get; set; }

    public PostIt()
    {
        ID = -1;
    }
}

和控制器代码:

public ActionResult Edit(int? id)
{
    PostIt postIt = new PostIt();

    if (id.HasValue)
    {
        postIt = new PostItBLL().GetByID(id.Value);
        if (postIt == null)
        {
            return HttpNotFound();
        }
    }
    return View(postIt);
 }

 [HttpPost]
 public ActionResult Edit(PostIt postit)
 {
     if (ModelState.IsValid)
     {
         Save(postit);
         return RedirectToAction("Index");
     }
     return View(postit);
 }

 public ActionResult Index()
 {
     return View(db.PostIt.ToList());
 }

 private void Save(PostIt postIt)
 {
     if (postIt.ID < 0)
     {
         new PostItBLL().Add(postIt);
     }
     else
     {
         new PostItBLL().Update(postIt);
     }
 }

页面加载相关,但是当我更改som值并单击“保存”按钮时,我收到以下错误:

传递到字典中的模型项的类型为“MyProject.Models.PostIt”,但此字典需要“System.String”类型的模型项。

关于我正在犯的错误的任何线索?

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

出现问题是因为PostIt模型上的Content属性为null。如果为Content提供类似string.Empty的默认值,则不会出现问题。你可以这样做:

@Html.Partial("MarkdownEditor", @Model.Content ?? string.Empty)

要获得解释,请阅读此问题的已接受答案:ASP.NET MVC, strongly typed views, partial view parameters glitch