2012-05-08 65 views
1

在Asp.Net MVC3中,我是新的,我试图使用CKEditor。但无法得到我输入的文本,然后我推送提交。无法从CKEditor中获取文本MVC3

笔者认为:

<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}); 
} 

我在做什么错?

回答

2

您的问题有三种解决方案。我会开始直接解决它(两种方式),但是,我认为这不是最好的方法。无论如何,稍后再说。

ASP.NET MVC(3)作品很多约定为主。它会奇迹般地将请求中的值等分配给参数和其他值。当然,这些约定显然是基于你的参数名称。你必须确保你的名字匹配(如你现在可能知道的,这将是一个难以维系的)。

的快速解决方案是命名视图中的相同,您的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

最后溶液(我喜欢)是创建一个视图模型。我建议你阅读本指南(http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/examining-the-edit-methods-and-edit-view),了解如何正确编辑页面等。

而最后一件事,如果你想提交HTML作为内容,你就必须要么禁用保存ASP.NET的守卫或注释添加到您的方法(或类)。请不要禁用保存警告(它会检查输入的HTML等),只有在需要时禁用它注释。您可以将ValidateInput属性(MSDN link)设置为false。例如:

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