UPDATE:
私は、ファイルコントローラ内に投稿したい方法...また、私は、アプリケーションの上にほとんど影響を与えないので、それは最高の自分のフォームまたは部分図で扱っています:ここで
は、部分的なビュー/子アクションを含む別の例である:
HomeController.cs:
using System.Web.Mvc;
public class HomeController : Controller
{
[Route("~/")]
public ActionResult Index()
{
return View();
}
[Route("ModalContent")]
[ChildActionOnly]
public ActionResult ModalContent()
{
return View();
}
}
FilesController.cs:ホーム\ ModalContent.cshtml \
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
<button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
Show modal
</button>
<div class="modal fade" id="myModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body">
@Html.Action("ModalContent")
</div>
</div>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</body>
</html>
再生回数::ホーム\ Index.cshtml \
using System.Web.Mvc;
[RoutePrefix("sth/api/v1/files")]
public class FilesController : Controller
{
[HttpPost]
[Route("getcloudcontent")]
public ActionResult CloudContent(string model)
{
return Content("test");
}
}
ビュー
@using (Html.BeginForm("CloudContent", "Files", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div id="container"></div>
<input type="submit" name="PostMe" title="Submit" value="Submit Form" />
}
Global.asax.cs:
using System.Web.Mvc;
using System.Web.Routing;
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
RouteTable.Routes.MapMvcAttributeRoutes();
}
}
と結果HTML:
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
<button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
Show modal
</button>
<div class="modal fade" id="myModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body">
<form action="/sth/api/v1/files/getcloudcontent" enctype="multipart/form-data" method="post">
<div id="container"></div>
<input type="submit" name="PostMe" title="Submit" value="Submit Form" />
</form>
</div>
</div>
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</body>
</html>
あなたのコードに問題がある別の何かがあります。私はあなたのコードを実行し、それは何の問題もなく働いた。
FilesController.cs:
using System.Web.Mvc;
namespace Controllers
{
[RoutePrefix("sth/api/v1/files")]
public class FilesController : Controller
{
[Route("")]
public ActionResult Index()
{
return View();
}
[HttpPost]
[Route("getcloudcontent")]
public ActionResult CloudContent(string model)
{
return Content("test");
}
}
}
Index.cshtml:
@using (Html.BeginForm("CloudContent", "Files", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div id="container"></div>
<input type="submit" name="PostMe" title="Submit" value="Submit Form" />
}
のGlobal.asaxここ
コードです。CS:
using System.Web.Mvc;
using System.Web.Routing;
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
RouteTable.Routes.MapMvcAttributeRoutes();
}
}
私は、次のHTML参照http://localhost/sth/api/v1/filesに行くとき:
<!DOCTYPE html>
<html>
<head><title>Test</title></head>
<body>
<form action="/sth/api/v1/files/getcloudcontent" enctype="multipart/form-data" method="post"> <div id="container"></div>
<input type="submit" name="PostMe" title="Submit" value="Submit Form" />
</form>
</body>
</html>
お知らせアクションは接頭辞が含まれて正しいURLを持って形成します。
htmlヘルパーを使用する代わりに、自分でhtmlを書くことができます。ヘルパーは、あなたが望むものであれば素晴らしいですが、あなたが何をしているのかからまったく逸脱すれば、痛みを伴うことがあります。別のオプションは、カスタムヘルパーを書くことです。これが1オフの場合、それは価値がない。 – nurdyguy
その他のオプションには、RouteConfig.cs(ick)に独自のルートを記述するか、またはファイルコントローラ内のメソッドにルート属性を追加することが含まれます。あなたが明示的にフォームルートを書くことはあなたの最善の策ですが、それらにアクセスできない場合。 – nurdyguy
@nurdyguy - ファイルコントローラのメソッドにルート属性を追加することができます - 私は実際には[[Route( "getcloudcontent")] 'を持っていますが、プレフィックスはまだ重要ですか? – Bartosz