2017-05-08 18 views
0

내가 뭘 잘못하고 있는지 알 수 없습니다. fileUpload 작업에 게시하는 인덱스보기로 프로젝트가 시작됩니다. fileUpload 액션에서 컨트롤러의 다른 메소드를 changeText()라고하고 changeText()의 끝에서 Results 문자열을 호출하여 매개 변수 문자열을 취합니다. Results()의 끝에서 Results.cshtml에 View()가 반환됩니다. 그러나 Results.cshtml은로드되지 않습니다. 내가 뭔가를 놓치고 있는지 궁금합니다..net의 별도 컨트롤러 동작에서 뷰로드하기

 public ActionResult Index() 
     { 

      return View(); 
     } 

     [HttpPost] 
     public void FileUpload(HttpPostedFileBase file) 
     { 
      Debug.WriteLine(file.FileName) 
      if (file != null) 
      { 
       var fileName = Path.GetFileName(file.FileName); 
       pathName = Path.Combine(Server.MapPath("~/Content/Images"), fileName); 
       file.SaveAs(pathName); 
      } 

      changeText(txt); 

     } 


    public void changeText (string text) 
    { 

       ResultX(textChange);    
    } 



     public ActionResult ResultX(string text) 
     { 

       Debug.WriteLine("resultx action"); 
       return View(text); 

     } 

Thanks. 
+0

주 컨트롤러를 호출하고 있는지 확인 작동하지 않는 경우. – OmG

+0

사용중인 올바른 asp.net MVC 버전의 태그를 업데이트하십시오. – ps2goat

답변

1

나는 모든 방법에 대한 이유를 볼 수 없습니다! 코드가 매우 간단 할 수 있습니다.

public ActionResult Index() 
    { 

     return View(); 
    } 

    [HttpPost] 
    public ActionResult FileUpload(HttpPostedFileBase file) 
    { 
     Debug.WriteLine(file.FileName) 
     if (file != null) 
     { 
      var fileName = Path.GetFileName(file.FileName); 
      pathName = Path.Combine(Server.MapPath("~/Content/Images"), fileName); 
      file.SaveAs(pathName); 
     } 

     Debug.WriteLine("resultx action"); 
     return View("ResultX",text); 

    } 

이 모든 당신이 바로보기

2

이것은 코드가 있어야합니다 것입니다 : 당신이 실제로 행동이 어떻게 작동하는지 이해처럼은 보이지 않는다

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

[HttpPost] 
public ActionResult FileUpload(HttpPostedFileBase file) 
{ 
    Debug.WriteLine(file.FileName) 
    if (file != null) 
    { 
     var fileName = Path.GetFileName(file.FileName); 
     pathName = Path.Combine(Server.MapPath("~/Content/Images"), fileName); 
     file.SaveAs(pathName); 
    } 

    return changeText(txt); 
} 

public ActionResult changeText (string text) 
{ 
     return ResultX(textChange);    
} 

public ActionResult ResultX(string text) 
{ 
     return View("ResultX", text); 
} 
1

. 첫째, 액션의 반환 유형에 따라 클라이언트에 전송되는 응답이 결정됩니다. 리턴하는 void은 단순히 200 개의 상태 코드가있는 빈 응답 본문을 리턴한다는 것을 의미합니다. 사용자가 웹 브라우저를 통해 귀하의 사이트에 액세스하는 측면에서, 그것은 당신이 원하는 것이 아닌 완전히 빈 페이지로 번역됩니다.

여기에 ResultX.cshtml을 사용하여 ViewResult을 반환하는 것이 좋습니다. 즉, FileUpload 조치는 ViewResult 또는 일반적으로 ActionResult을 반환해야합니다. ActionResult 다른 모든 결과 유형에 대한 기본 클래스입니다, 그래서 당신은 당신의 반환 그런 식으로 입력하면, 당신은 당신이 좋아하는 결과의 모든 종류를 반환 할 수는 감안할 등 ViewResult, RedirectResult, EmptyResult,

이든, 존재 그 방법으로서의 changeTextResultX은 불필요하다. 이 모든 것을 거의 모든 세 가지 방법으로 수행 할 수있는 이유는 없습니다. return View("ResultX", txt);FileUpload에 직접 입력하십시오. 그러나 성공적인 게시물은 PRG (Post-Redirect-Get) 패턴을 따라야하므로 사용자가 페이지를 새로 고치면 양식이 다시 제출되지 않습니다. 결과적으로 은 실제로이 성공하면 리디렉션을 반환하고 오류시 원래의 FileUpload보기를 반환해야합니다. 전체적으로 그 모양은 다음과 같습니다.

[HttpPost] 
public ActionResult FileUpload(HttpPostedFileBase file) 
{ 
    if (file != null) 
    { 
     // Moved this inside the conditional because you can't 
     // reference `file.FileName` unless `file` is non-null 
     Debug.WriteLine(file.FileName); 

     var fileName = Path.GetFileName(file.FileName); 
     pathName = Path.Combine(Server.MapPath("~/Content/Images"), fileName); 
     file.SaveAs(pathName); 
     return RedirectToAction("Index"); 
    } 

    // Traditionally, you'd pass in what was posted to the call to `View`, 
    // but you cannot repopulate a file input, so there's no point here. 
    return View(); 
} 
관련 문제