मेरे पास मेरे नियंत्रक में एक मूल संपादन विधि है जो संपादन सफल होने पर शीर्ष स्तर की सूची ("अनुक्रमणिका") पर वापस रीडायरेक्ट करता है। एमवीसी मचान के बाद मानक व्यवहार।सी # एएसपी.नेट एमवीसी पिछला पृष्ठ
मैं पिछले पृष्ठ पर वापस रीडायरेक्ट करने के लिए इस संपादन विधि को बदलने की कोशिश कर रहा हूं (इंडेक्स नहीं)। चूंकि मेरी संपादन विधि डिफ़ॉल्ट मैप किए गए इनपुट पैरामीटर "आईडी" का उपयोग नहीं कर रही थी, इसलिए मैंने पहले पिछले यूआरएल में पास करने के लिए इसका उपयोग करने की कोशिश की थी।
मेरी संपादित करें "प्राप्त" विधि में, मैं पिछले URL हड़पने के लिए इस लाइन का इस्तेमाल किया और यह ठीक काम किया:
ViewBag.ReturnUrl = Request.UrlReferrer;
मैं तो मेरे फ़ॉर्म का उपयोग करके संपादित करें "पोस्ट" विधि को यह वापसी यूआरएल भेजा इस तरह टैग:
@using (Html.BeginForm(new { id = ViewBag.ReturnUrl }))
अब यह पहिया गिर गई है। मैं आईडी पैरामीटर से यूआरएल को सही ढंग से पार्स नहीं कर सका।
*** अद्यतन: हल ** *
एक गाइड के रूप गैरी के उदाहरण का उपयोग करना, मैं "आईडी" के लिए "returnUrl" से मेरी पैरामीटर बदल गया है और एक छिपे हुए इस्तेमाल किया मेरे पैरामीटर को पास करने के लिए फ़ील्ड (फॉर्म टैग के बजाए)। सबक सीखा: केवल "आईडी" पैरामीटर का उपयोग करें जिसका उपयोग किया जाना था और इसे सरल रखना था। यह अब काम करता है। नोट्स के साथ मेरा अपडेटेड कोड यहां दिया गया है:
सबसे पहले, मैं Request.UrlReferrer का उपयोग कर पिछला यूआरएल पकड़ता हूं जैसा मैंने पहली बार किया था।
//
// GET: /Question/Edit/5
public ActionResult Edit(int id)
{
Question question = db.Questions.Find(id);
ViewBag.DomainId = new SelectList(db.Domains, "DomainId", "Name", question.DomainId);
ViewBag.Answers = db.Questions
.AsEnumerable()
.Select(d => new SelectListItem
{
Text = d.Text,
Value = d.QuestionId.ToString(),
Selected = question.QuestionId == d.QuestionId
});
// Grab the previous URL and add it to the Model using ViewData or ViewBag
ViewBag.returnUrl = Request.UrlReferrer;
ViewBag.ExamId = db.Domains.Find(question.DomainId).ExamId;
ViewBag.IndexByQuestion = string.Format("IndexByQuestion/{0}", question.QuestionId);
return View(question);
}
और अब मैं रूप में एक छिपी हुई फ़ील्ड का उपयोग कर [HttpPost] विधि के लिए मॉडल से returnUrl पैरामीटर पारित:
@using (Html.BeginForm())
{
<input type="hidden" name="returnUrl" value="@ViewBag.returnUrl" />
...
[HttpPost] विधि में हम से पैरामीटर खींच छिपी हुई फ़ील्ड और इसे करने के लिए पुन: निर्देशित ....
//
// POST: /Question/Edit/5
[HttpPost]
public ActionResult Edit(Question question, string returnUrl) // Add parameter
{
int ExamId = db.Domains.Find(question.DomainId).ExamId;
if (ModelState.IsValid)
{
db.Entry(question).State = EntityState.Modified;
db.SaveChanges();
//return RedirectToAction("Index");
return Redirect(returnUrl);
}
ViewBag.DomainId = new SelectList(db.Domains, "DomainId", "Name", question.DomainId);
return View(question);
}
भले ही आप 'id' का उपयोग नहीं कर रहे हैं, मैं इसका उपयोग यूआरएल पास करने के लिए नहीं करूँगा। यह एक हैक की तरह लगता है, और मुझे यकीन है कि ऐसा करने का एक बेहतर तरीका है। –
हां, ईरक आप सही हैं। मैं एक बदसूरत हैक का उपयोग कर रहा था। यह मेरा पहला एमवीसी ऐप है। मैंने कई चीजों की कोशिश की और कई पदों को पढ़ा और हैक मेरा सबसे अच्छा प्रयास था। मैंने इसे गैरी के उदाहरण के आधार पर तय किया। धन्यवाद, –