web-dev-qa-db-ja.com

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で学生モデルを渡すことはできますか?

55
Amit

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リクエストを発行します。

65

モデルの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);
    }
31

はい、表示したモデルを使用して渡すことができます

return RedirectToAction("GetStudent", "Student", student1 );

student1Studentのインスタンスであると仮定します

次の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になります

11
user3559349
  [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);
    }
0
hansen.palle