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 の使用
1つの要求から次の要求までのみ持続するデータのセットを表します
[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"});
これにより、Student/GetStudent?Name=John & Class=clsz
のようなGETリクエストが生成されます
リダイレクト先のメソッドが
[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()
メソッドは、モデルの各プロパティの.ToString()
値を使用してRouteValueDictionary
を構築します。ただし、モデルのすべてのプロパティが単純なプロパティである場合にのみバインドが機能し、メソッドが再帰を使用しないため、プロパティが複雑なオブジェクトまたはコレクションである場合は失敗します。たとえば、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);
}