将大型HTML字符串从View传递给Controller

Bin*_*Cat 7 c# forms model-view-controller

注意:我现在是戴着.Net开发人员的前端开发人员.可笑,我知道,但是我最终陷入这个混乱局面并不是这个问题的重点.有了免责声明,这就是正在发生的事情.

正如标题所示,我需要将一个相当长的HTML字符串(如在多页文本中)从View传递给Controller.我花了最后几天研究各种方法来实现这一目标.TBH,有些事情是有道理的,有些则没有.

这是我的代码片段里面的视图:

var html =
    "<form id='htmlContent' action='" + customUrl + "' method='post'>" +
        "<input type='hidden' name='content' id='contentStr'>" +
    "</form>";

// string literal html gets appended to some element...

$("#htmlContent").submit();
Run Code Online (Sandbox Code Playgroud)

我想在此指出一些事项:

  • 我在这里使用字符串文字来构造表单,因为这个DOM需要在某个时刻动态地附加到其他元素.
  • 我是否使用有效的HTML字符串是不可能的.我已经分别测试了它的有效性,一切看起来都很好.
  • 我故意使用jQuery的submit()方法而不是使用Ajaxcall.

控制器:

[HttpPost]
public ActionResult ParseHtml(FormCollection form)
{
    string htmlStr = form["content"].ToString();
    ....
    // some code in between, but the first line appears to be causing an error or
    // the value is not being retrieved.
    ....
    return new EmptyResult();
}
Run Code Online (Sandbox Code Playgroud)

我理解我在MVC框架的上下文中工作,我有点理解它的概念.但是,知道如何用我非常有限的知识来实现​​它是另一回事(特别是当你从一个早已离开你的项目的人那里继承了一个糟糕的代码库时!)

我想这很简单易行,但我的轮子旋转时间比我想要的长得多.任何指向正确方向的指针都将非常感激.

C B*_*uer 2

在这个最小的可重复答案中,我将向您展示如何使其工作,您可以从这里运行它:

索引.cshtml

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript">
    $(document).ready(function () {
        var url = '@Url.Action("Create","Stack")';
        var html = $("<form id='htmlContent' action='"+url+"' method='post'><input type='hidden' name='content' id='contentStr' value='oranges'/></form>");
        $(body).append(html);

        $("#htmlContent").submit();
    });
</script>

@{
    ViewBag.Title = "title";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>title</h2>
Run Code Online (Sandbox Code Playgroud)

控制器.cs

using System.Web.Mvc;

namespace MvcPlayground.Controllers
{
    public class StackController : Controller
    {
        //
        // GET: /Stack/

        public ActionResult Index()
        {
            return View();
        }

        public ActionResult Create(FormCollection form)
        {
            string htmlStr = form["content"].ToString();

            return View("Index");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果在 上放置断点return View("Index");,您将看到 htmlStr 是“oranges”,这是附加文本框的值。