我是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});
}
我做错了什么?
答案 0 :(得分: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/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});
}