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