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)
我想在此指出一些事项:
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框架的上下文中工作,我有点理解它的概念.但是,知道如何用我非常有限的知识来实现它是另一回事(特别是当你从一个早已离开你的项目的人那里继承了一个糟糕的代码库时!)
我想这很简单易行,但我的轮子旋转时间比我想要的长得多.任何指向正确方向的指针都将非常感激.
在这个最小的可重复答案中,我将向您展示如何使其工作,您可以从这里运行它:
索引.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”,这是附加文本框的值。
| 归档时间: |
|
| 查看次数: |
4560 次 |
| 最近记录: |