2016-09-06 4 views
0

양식이있는 부분보기가 있습니다.이 부분은 홈 컨트롤러에서 시작합니다. [RoutePrefix("sth/api/v1/files")]모달 부분보기에서 routeprefix 속성이있는 다른 컨트롤러에 게시 양식

비어있는 내 양식 조치 결과 :

@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" /> 
    @Html.HiddenFor(m => m.MyProperty); 
    @Html.HiddenFor(m => m.SelectedIds); 
} 

나는 그러나 파일 컨트롤러는 경로 접두어를 가지고, 파일 컨트롤러에이 양식을 게시 할.

이름이 지정된 경로에는 추가되지 않는 것 같아서 beginrouteform을 사용할 수 없습니다.

[HttpPost] 
[Route("getcloudcontent")] 
public List<ConnectedFile> CloudContent(CloudFilesModel model) 
{ 
    //do magic 
} 
+0

대신 html 도우미를 사용하면 html을 직접 작성할 수 있습니다. 도우미는 그것이 정확히 무엇인지 원한다면 훌륭하지만, 그들이하는 일에서 전혀 벗어나면 고통 스러울 수 있습니다. 또 다른 옵션은 맞춤 헬퍼를 작성하는 것입니다. 이것이 1 오프라면 그것은 가치가 없습니다. – nurdyguy

+0

다른 옵션으로는 RouteConfig.cs (ick)에 고유 한 라우트를 작성하거나 파일 컨트롤러의 메소드에 라우트 속성을 추가하는 것이 있습니다. 그래도 접근 할 수 없다면 양식 경로를 명시 적으로 작성하는 것이 최선책입니다. – nurdyguy

+0

@nurdyguy - 파일 컨트롤러의 메소드에 경로 속성을 추가 할 수 있습니다. 실제로 [[Route ("getcloudcontent")]'가 있지만 접두어는 여전히 중요하다고 생각합니까? – Bartosz

답변

1

UPDATE :

나는 파일 컨트롤러에 게시 할 방법 ... 또한, 나는 응용 프로그램을 통해 약간의 영향을, 그래서 가장 좋은 내 양식 또는 부분보기에서 처리 할 것 :

HomeController.cs :

01,235,164 여기

부분보기/하위 동작을 포함하는 또 다른 예이다

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이 형성.

+0

부분보기로 테스트했습니다. 잘 작동합니다. –

+0

고마워요 - 일부 Home 컨트롤러 동작에서 반환되는 PartialView의 문제 일 수 있고 부트 스트랩 모달로 표시 될 수 있습니까? – Bartosz

+0

'@ Html.Partial (partialViewName)'호출의 결과로 부분적인 부분이 서버 측에서 렌더링되기 때문에, 그들이 어디에서 렌더링되는지를 "알지 못합니다". 그래서 당신의 코멘트를 기반으로해서는 안됩니다. "부분적인 견해가 컨트롤러 액션에서 돌아왔다"는 말은 당신이 아이 액션을 의미한다고 생각합니다. 이것은 약간 다른 경우입니다. 내 대답을 다른 예로 업데이트하겠습니다. –

관련 문제