asp.net mvc - क्या हम RedirectToAction में पैरामीटर के रूप में मॉडल पास कर सकते हैं?




asp.net-mvc asp.net-mvc-3 (4)

मुझे ऐसा कुछ मिला, हार्डकोडेड 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));
    }
}

मैं जानना चाहता हूं, कोई तकनीक है ताकि हम RedirectToAction में पैरामीटर के रूप में Model को पास कर सकें

उदाहरण के लिए:

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 में छात्र मॉडल पास कर सकता हूं?


हां आप उस मॉडल को पास कर सकते हैं जिसका उपयोग आपने दिखाया है

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

Student मानते हुए student1 का एक उदाहरण है

जो निम्नलिखित यूआरएल उत्पन्न करेगा (डिफ़ॉल्ट मार्गों का उपयोग करके और student1 का मान ID=4 और Name="Amit" )

.../Student/GetStudent/4?Name=Amit

आंतरिक रूप से RedirectToAction() विधि मॉडल में प्रत्येक प्रॉपर्टी के .ToString() मान का उपयोग करके .ToString() बनाता है। हालांकि, बाध्यकारी केवल तभी काम करेगा यदि मॉडल में सभी गुण सरल गुण हैं और यदि कोई गुण जटिल वस्तुएं या संग्रह हैं तो यह विफल हो जाता है क्योंकि विधि रिकर्सन का उपयोग नहीं करती है। उदाहरण के लिए, Student में एक संपत्ति List<string> Subjects , तो उस संपत्ति के परिणामस्वरूप क्वेरी स्ट्रिंग मान होगा

....&Subjects=System.Collections.Generic.List'1[System.String]

और बाध्यकारी असफल हो जाएगा और वह संपत्ति null होगी


कार्रवाई के लिए redirect to action या मॉडल के लिए new कीवर्ड redirect to action आवश्यकता नहीं है।

 [HttpPost]
    public ActionResult FillStudent(Student student1)
    {
        return GetStudent(student1); //this will also work
    }
    public ActionResult GetStudent(Student student)
    {
        return View(student);
    }

  [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);
    }






controller