6

मुझे होम पेज पर पंजीकरण फॉर्म और लॉगिन फॉर्म प्रदर्शित करने की आवश्यकता है।एएसपी .NET एमवीसी 3: चाइल्ड एक्शन और रीडायरेक्ट

यदि सत्यापन इन दो रूपों में विफल रहता है, तो मुझे होम पेज पर उचित त्रुटियां प्रदर्शित करने की आवश्यकता है।

लेकिन अगर कोई त्रुटि नहीं थी, तो उपयोगकर्ता को सुरक्षित डैशबोर्ड पर रीडायरेक्ट किया जाना चाहिए।

इसे पूरा करने के मैं मुख पृष्ठ पर child action उपयोग कर रहा हूँ इस तरह:

@Html.Action("Register", "Membership") 

यह है, अगर कोई त्रुटि है की उम्मीद के रूप में पूरी तरह से काम के रूप में यह re-render उचित model साथ partial view करने में सक्षम है कि validation state जानकारी है।

लेकिन अगर कोई त्रुटि हुई थी, जब यह रीडायरेक्ट करने के लिए कोशिश करता है, यह है कि बताते हुए एक त्रुटि फेंकता है:

Child actions are not allowed to perform redirect actions. 

वहाँ इस के आसपास कोई तरीका है? मुझे यकीन है कि होमपेज पर पंजीकरण और लॉगिन फॉर्म डालने का एक तरीका है। शायद मुझे पता नहीं है क्योंकि मैं एएसपी नेट एमवीसी के लिए काफी नया हूं।

क्या आप मुझे सही दिशा में इंगित कर सकते हैं?

उत्तर

6

एक तरह से यह करने के लिए किया जाता है और, था, कुछ वापसी जेसन जो थोड़ा सा है क्लाइंट-साइड स्क्रिप्ट आपके लिए रीडायरेक्ट करने के लिए देखेगी और उपयोग करेगी।

यहां एक सरल उदाहरण है।

नियंत्रक:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using System.ComponentModel.DataAnnotations; 
using MvcApplication12.Models; 

namespace MvcApplication12.Controllers 
{ 
    public class HomeController : Controller 
    { 
     public ActionResult Index() 
     { 
      return View(); 
     } 

     public ActionResult Register() 
     { 
      return PartialView(new UserDetails()); 
     } 

     [HttpPost] 
     public ActionResult Register(UserDetails details) 
     { 
      if (ModelState.IsValid) 
      { 
       return Json(new {redirect = true, url = Url.Action("Index","Dashboard")}); 
      } 
      else 
      { 
       return PartialView(details); 
      } 
     } 
    } 
} 

होम पेज 'सूचकांक' दृश्य:

@{ 
    ViewBag.Title = "Index"; 
} 
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
<script type="text/javascript"> 
    function checkForRedirect(data) 
    { 
     if (data.redirect && data.url) 
     { 
      location.href = data.url; 
     } 
    } 
</script> 

<p>Home page stuff.....</p> 

<div id="RegistrationArea"> 
    @Html.Action("Register") 
</div> 

<p> Home page stuff.....</p> 

पंजीकरण प्रपत्र 'पंजीकृत करें' आंशिक दृश्य:

@model MvcApplication12.Models.UserDetails 
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

@using (Ajax.BeginForm(new AjaxOptions() 
{ 
    HttpMethod = "POST", 
    Url = Url.Action("Register", "Home"), 
    OnSuccess = "checkForRedirect(data)", 
    UpdateTargetId = "RegistrationArea", 
    InsertionMode = InsertionMode.Replace 
})) 
{ 
    @Html.LabelFor(m => m.UserName) 
    @Html.EditorFor(m => m.UserName) 
    @Html.ValidationMessageFor(m => m.UserName) 

    @Html.LabelFor(m => m.Password) 
    @Html.EditorFor(m => m.Password) 
    @Html.ValidationMessageFor(m => m.Password) 

    <input type="submit" /> 
} 
2

आपको उस संदर्भ में बाल क्रियाओं का उपयोग नहीं करना चाहिए।

आपकी समस्या का समाधान पंजीकरण के लिए आपके पृष्ठ में दो रूपों और लॉगिन के लिए एक स्थान हो सकता है। एक सदस्यता नियंत्रक में पंजीकरण कार्रवाई में पंजीकरण फॉर्म पोस्ट, सदस्यता नियंत्रक में लॉगिन कार्रवाई में लॉगिन कार्रवाई पोस्ट।

मामले में एक त्रुटि कार्य आप कर सकते हैं में से एक में होता है:

  • एक समर्पित लॉग इन/पंजीकरण पेज और उपयोग मॉडल/मान्यता परिणाम दिखाएं यूआरएल के लिए त्रुटि संदेश
  • पुनर्निर्देशन को दिखाने के लिए/कार्रवाई उपयोगकर्ता बजाय एक RedirectResult लौटने जब प्रस्तुत मान्य है लॉगिन और पंजीकरण बिट्स के लिए ajax रूपों का उपयोग करने के लिए से आ रही है और आप TempData में जगह एक त्रुटि संदेश दिखाने
1

रीडायरेक्ट के लिए जावास्क्रिप्ट का उपयोग कर के बिना: यदि आप अपने अंदर फॉर्म डालते हैं आर बच्चे के विचार, कभी-कभी यदि आप Beginform सहायक (बाल दृश्य के अंदर) में कार्रवाई का नाम और नियंत्रक नाम निर्दिष्ट करते हैं, तो यह समस्या नहीं होती है।इससे पहले कि

:

@using (Html.BeginForm()) 
{ 
... 
} 

के बाद: उदाहरण के लिए मैं इस तरह मेरे बच्चे कार्रवाई दृश्य बदला

@using (Html.BeginForm("InsertComment", "Comments", FormMethod.Post, new { id = "commentform" })) 
{ 
... 
} 

अब, आप "InsertComment" कार्रवाई के अंदर RedirectAction आदेश डाल सकते हैं और सब कुछ काम करेंगे।


दो के रूप में एक पृष्ठ प्रबंधन:

बटन (प्रत्येक फार्म) जमा के लिए

1.Specify नाम (उदा: "submitvalue")

Form1:

<input type="submit" value="login" name="submitValue" class="btn btn-success pull-right" /> 

फॉर्म 2:

<input type="submit" value="register" name="submitValue" class="btn btn-success pull-right" /> 

2. इन रूपों के लिए दो कार्यवाही करें। (उदाहरण: "रजिस्टर" और "लॉग इन")

[HttpPost] 
    public ActionResult Login(LoginVM model, string submitValue) 
      { 
       if (submitValue == "login") 
       { 
       //Do Something 
       } 
       ... 
      } 


[HttpPost] 
public ActionResult Register(RegisterVM model, string submitValue) 
      { 
       if (submitValue == "register") 
       { 
       //Do Something 
       } 
       ... 
      } 
  • आप रजिस्टर या रूपों में प्रवेश बटन पर क्लिक करते हैं, कार्यों के दोनों कहा जाता है लेकिन साथ "अगर" बयान हम whichone निर्धारित हमारा लक्ष्य है ।
संबंधित मुद्दे