1

我是 Asp.Net MVC3 的新手,我正在尝试使用 CKEditor。但是无法获取我输入的文本,然后我推送提交。

我的观点:

<form method=post action="@Url.Action("Description")">
    <textarea class="ckeditor" id="editor1" rows="10" name="Details">@Resources.Resources.DescriptionSampleText</textarea>
    <input type="submit" />
</form>

那里的控制器我需要文本:

[HttpPost]
public ActionResult Description(string textdetails)
{
    //Doing something with the text
    return RedirectToAction("Create", "Project", new { text = textdetails});
}

我究竟做错了什么?

4

1 回答 1

2

您的问题有三种解决方案。我将从直接解决它开始(两种方法),但是,在我看来这不是最好的方法。无论如何,稍后再谈。

ASP.NET MVC (3) 很多基于约定的工作。它会神奇地将值等从请求分配到参数等。当然,这些约定显然是基于参数的名称。你必须确保你的名字匹配(正如你现在可能想的那样,这将是一个很难维护的问题)。

快速的解决方案是将视图中的 textarea 命名为与 HttpPost 操作的参数相同。您的视图代码如下所示:

<form method=post action="@Url.Action("Description")">
    <textarea class="ckeditor" id="editor1" rows="10" name="Textdetails">@Resources.Resources.DescriptionSampleText</textarea>
    <input type="submit" />
</form>

这应该有效。注意:我现在没有自己测试这个,但是许多初学者指南也这样做,所以我认为这会起作用。无论如何,我真的不喜欢这个解决方案,因为它真的很难维护(重构等不会很容易)。

第二种解决方案是使用FormCollection. 您将其作为 HttpPost 操作的参数提供,然后您可以通过索引访问您的值。有关示例和更多信息,您可以查看此 SO 帖子:https ://stackoverflow.com/a/5088493/578843 。

最后一个解决方案(我更喜欢)是创建一个 ViewModel。我建议您阅读本指南(http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/examineing-the-edit-methods-and-edit-view),了解如何正确编辑页面等。

最后一件事,如果您想将 HTML 作为内容提交,您将不得不禁用 ASP.NET 的保存保护或向您的方法(或类)添加注释。请不要通常禁用保存保护(它会检查 html 等的输入),仅在需要时使用注释禁用它。您可以在您的操作中将ValidateInput属性(MSDN 链接)设置为 false。例子:

[HttpPost]
[ValidateInput(false)]
public ActionResult Description(string textdetails)
{
    //Doing something with the text
    return RedirectToAction("Create", "Project", new { text = textdetails});
}
于 2012-05-08T21:01:18.687 回答