كيف يمكنك إعادة توجيه إلى صفحة باستخدام وظيفة الفعل ؟

StackOverflow https://stackoverflow.com/questions/129335

  •  02-07-2019
  •  | 
  •  

سؤال

عند استدعاء RedirectToAction في وحدة تحكم ، فإنه تلقائيا إعادة توجيه HTTP باستخدام الحصول على.كيف يمكنني أن أقول صراحة أن استخدام HTTP المنصب ؟

لدي عمل يقبل على حد سواء الحصول على وطلبات الوظائف و أريد أن تكون قادرة على RedirectToAction باستخدام البريد وإرساله بعض القيم.

مثل هذا:

this.RedirectToAction(
    "actionname",
    new RouteValueDictionary(new { someValue = 2, anotherValue = "text" })
);

أريد someValue و anotherValue القيم ليتم إرسالها باستخدام HTTP POST بدلا من الحصول عليها.لا أحد يعرف كيفية القيام بذلك ؟

هل كانت مفيدة؟

المحلول

HTTP لا يدعم إعادة توجيه إلى صفحة باستخدام وظيفة.عند إعادة توجيه في مكان ما ، HTTP "موقع" رأس يحكي المتصفح الى متصفح يجعل الحصول على طلب هذه الصفحة.سيكون لديك على الأرجح إلى مجرد كتابة كود الصفحة الخاصة بك لقبول طلبات GET وكذلك طلبات POST.

نصائح أخرى

خاص سبيل المثال ، أود فقط أن تفعل هذا ، لأن من الواضح أنك لا تهتم في الواقع وجود المتصفح الحصول على إعادة توجيه على أي حال (بحكم قبول الجواب كنت قد قبلت بالفعل):

[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Index() {
   // obviously these values might come from somewhere non-trivial
   return Index(2, "text");
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(int someValue, string anotherValue) {
   // would probably do something non-trivial here with the param values
   return View();
}

أن يعمل بسهولة و لا يوجد عمل مضحك حقا على هذا يسمح لك للحفاظ على حقيقة أن ثانية واحدة فقط تقبل طلبات POST HTTP (إلا في هذا المثال ، وهو تحت التحكم الخاصة بك على أي حال) وكنت لا تضطر إلى استخدام TempData سواء ، وهو ما الرابط الذي نشر في الجواب يوحي.

أنا أحب أن أعرف ما هو "خطأ" مع ذلك ، إذا كان هناك أي شيء.من الواضح إذا كنت تريد أن يكون حقا إرسالها إلى المتصفح إعادة توجيه هذا لن ينجح, ولكن بعد ذلك يجب عليك أن تسأل لماذا تحاول تحويل هذا بغض النظر, لأنه يبدو لي غريبا.

على أمل أن يساعد.

إذا كنت ترغب في تمرير البيانات بين اثنين من الإجراءات خلال إعادة توجيه دون أن تتضمن أي بيانات في سلسلة الاستعلام ، ووضع نموذج في TempData الكائن.

العمل

TempData["datacontainer"] = modelData;

عرض

var modelData= TempData["datacontainer"] as ModelDataType; 

TempData من المفترض أن يكون جدا قصير الأجل سبيل المثال ، يجب استخدامها فقط خلال الفترة الحالية و اللاحقة طلبات فقط!منذ TempData تعمل هذه الطريقة تحتاج إلى أن تعرف على وجه اليقين ما الطلب التالي سيتم إعادة توجيه إلى رأي آخر هو الوقت الوحيد الذي يمكن أن يضمن هذا.

ولذلك فإن السيناريو الوحيد الذي يستعمل TempData موثوق بها العمل عندما يتم إعادة توجيه.

هذه محاولة واحدة

return Content("<form action='actionname' id='frmTest' method='post'><input type='hidden' name='someValue' value='" + someValue + "' /><input type='hidden' name='anotherValue' value='" + anotherValue + "' /></form><script>document.getElementById('frmTest').submit();</script>");

أود أن توسيع الجواب جيسون الرايات

مثل هذا

ActionResult action = new SampelController().Index(2, "text");
return action;

و ايلي يكون هنا شيء فكرة على كيفية جعلها عامة متغير

يمكن الحصول على جميع أنواع تحكم

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top