Использование TempData
Представляет набор данных, который сохраняется только с одного запроса на следующий
blockquote>[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
Убедитесь, что метод, который вы хотите перенаправить, украшен
blockquote>[HttpGet]
, поскольку вышеупомянутое RedirectToAction выдаст запрос GET с кодом статуса HTTP 302 Найдено (общий способ выполнения перенаправления URL)
Я нашел что-то вроде этого, помогает избавиться от жестко закодированных тегов 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));
}
}
[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);
}
Да, вы можете передать модель, которую вы показали с помощью
return RedirectToAction("GetStudent", "Student", student1 );
, предполагая, что student1
является экземпляром Student
, который будет генерировать следующий URL-адрес (при условии, что вы используете маршруты по умолчанию и значение student1
: ID=4
и Name="Amit"
)
.../Student/GetStudent/4?Name=Amit
Внутренне метод RedirectToAction()
создает RouteValueDictionary
на используя значение .ToString()
каждого свойства в модели. Однако привязка будет работать только в том случае, если все свойства в модели являются простыми свойствами, и она терпит неудачу, если какие-либо свойства являются сложными объектами или наборами, потому что метод не использует рекурсию. Если, например, Student
содержит свойство List<string> Subjects
, то это свойство приведет к строковому значению запроса
....&Subjects=System.Collections.Generic.List'1[System.String]
, и привязка завершится неудачно, и это свойство будет null
Просто вызовите действие без необходимости для 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);
}