RedirectToAction에서 모델을 매개 변수로 전달할 수 있습니까?
알고 싶습니다 Model
. 매개 변수로 전달할 수있는 기술이 있습니다 .RedirectToAction
예를 들면 :
public class Student{
public int Id{get;set;}
public string Name{get;set;}
}
제어 장치
public class StudentController : Controller
{
public ActionResult FillStudent()
{
return View();
}
[HttpPost]
public ActionResult FillStudent(Student student1)
{
return RedirectToAction("GetStudent","Student",new{student=student1});
}
public ActionResult GetStudent(Student student)
{
return View();
}
}
내 질문-RedirectToAction에서 학생 모델을 전달할 수 있습니까?
TempData 사용
한 요청에서 다음 요청까지만 지속되는 데이터 집합을 나타냅니다.
[HttpPost]
public ActionResult FillStudent(Student student1)
{
TempData["student"]= new Student();
return RedirectToAction("GetStudent","Student");
}
[HttpGet]
public ActionResult GetStudent(Student passedStd)
{
Student std=(Student)TempData["student"];
return View();
}
대체 방법 쿼리 문자열을 사용하여 데이터 전달
return RedirectToAction("GetStudent","Student", new {Name="John", Class="clsz"});
이것은 다음과 같은 GET 요청을 생성합니다. Student/GetStudent?Name=John & Class=clsz
[HttpGet]
위의 RedirectToAction이 http 상태 코드 302 Found (URL 리디렉션을 수행하는 일반적인 방법)와 함께 GET 요청을 발행하므로 리디렉션하려는 메서드가 장식되어 있는지 확인합니다.
필요하지 않은 액션 redirect to action
이나 new
모델 의 키워드를 호출하십시오 .
[HttpPost]
public ActionResult FillStudent(Student student1)
{
return GetStudent(student1); //this will also work
}
public ActionResult GetStudent(Student student)
{
return View(student);
}
예, 당신이 사용하여 보여준 모델을 전달할 수 있습니다
return RedirectToAction("GetStudent", "Student", student1 );
student1
의 인스턴스 라고 가정Student
다음 URL을 생성합니다 (기본 경로를 사용하고 값 student1
이 ID=4
및 이라고 가정 Name="Amit"
)
.../Student/GetStudent/4?Name=Amit
내부적으로 RedirectToAction()
메서드 는 모델의 각 속성 값을 RouteValueDictionary
사용하여 a 를 빌드합니다 .ToString()
. 그러나 바인딩은 모델의 모든 속성이 단순 속성 인 경우에만 작동하고 메서드가 재귀를 사용하지 않기 때문에 속성이 복잡한 개체 또는 컬렉션이면 실패합니다. 예를 들어 Student
속성이 포함 된 List<string> Subjects
경우 해당 속성은 다음과 같은 쿼리 문자열 값이됩니다.
....&Subjects=System.Collections.Generic.List'1[System.String]
바인딩이 실패하고 해당 속성은 null
[HttpPost]
public async Task<ActionResult> Capture(string imageData)
{
if (imageData.Length > 0)
{
var imageBytes = Convert.FromBase64String(imageData);
using (var stream = new MemoryStream(imageBytes))
{
var result = (JsonResult)await IdentifyFace(stream);
var serializer = new JavaScriptSerializer();
var faceRecon = serializer.Deserialize<FaceIdentity>(serializer.Serialize(result.Data));
if (faceRecon.Success) return RedirectToAction("Index", "Auth", new { param = serializer.Serialize(result.Data) });
}
}
return Json(new { success = false, responseText = "Der opstod en fejl - Intet billede, manglede data." }, JsonRequestBehavior.AllowGet);
}
// GET: Auth
[HttpGet]
public ActionResult Index(string param)
{
var serializer = new JavaScriptSerializer();
var faceRecon = serializer.Deserialize<FaceIdentity>(param);
return View(faceRecon);
}
나는 이와 같은 것을 찾았고, 하드 코딩 된 tempdata 태그를 제거하는 데 도움이되었습니다.
public class AccountController : Controller
{
[HttpGet]
public ActionResult Index(IndexPresentationModel model)
{
return View(model);
}
[HttpPost]
public ActionResult Save(SaveUpdateModel model)
{
// save the information
var presentationModel = new IndexPresentationModel();
presentationModel.Message = model.Message;
return this.RedirectToAction(c => c.Index(presentationModel));
}
}
참조 URL : https://stackoverflow.com/questions/22505674/can-we-pass-model-as-a-parameter-in-redirecttoaction
'IT박스' 카테고리의 다른 글
Do I need a “/” at the end of an or tag, etc.? (0) | 2020.12.30 |
---|---|
변형 버그 : 스케일 및 오버 플로우 : Chrome에서 숨김 (0) | 2020.12.30 |
모듈 파일에서 매크로를 어떻게 사용합니까? (0) | 2020.12.30 |
문자열에서 "두 번 나타나는 한 글자"찾기 (0) | 2020.12.30 |
가져 오기 : JSON 오류 객체로 약속 거부 (0) | 2020.12.29 |