我是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”类型的模型项。
关于我正在犯的错误的任何线索?
感谢您的帮助
答案 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