2017-09-29 12 views
1

J'ai une vue A, une vue B et une vue _C.mvc - Comment affecter une valeur à une propriété de vue partielle à partir de sa vue parente

Voir _C est une vue partielle qui est rendu à l'intérieur de la vue A et B:

Voir A:

<div style="margin-top:20px;"> 

    <div> 
     @Html.Partial("~/Views/_C.cshtml", null, new ViewDataDictionary { { "WithRedirect", "true" } }); 
    </div> 

</div> 

View B

<div style="margin-top:20px;"> 

    <div> 
     @Html.Partial("~/Views/_C.cshtml", null, new ViewDataDictionary { { "WithRedirect", "false" } }); 
    </div> 

</div> 

Voir C (vue partielle) - fragment de code:

. 
. 

<td style="padding-bottom: 8px;"> 
    @Html.EditorFor(model => model.CurrentPassword, new { htmlAttributes = new { @class = "form-control k-textbox checkError", placeholder = "Enter current password" } }) 
</td> 
. 
. 

Lors du rendu vue partielle, je dois mettre un drapeau « WithRedirect » pour s'y référer plus tard dans le contrôleur de décider si je dois rediriger vers une autre vue ou non:

string withRedirect = this.ViewData.ContainsKey("WithRedirect") ? this.ViewData["WithRedirect"].ToString() : string.Empty; 

if (WithRedirect.Equals (» true ") return Redirect (returnUrl ?? Url.Action ("Index", "Page1")); sinon return Redirect (returnUrl? Url.Action ("Index", "Page2")); Lors du débogage du contrôleur, la variable WithRedirect est une chaîne vide.

Qu'est-ce que je fais de mal et quelle est la solution?

Répondre

0

À l'intérieur de votre vue partielle (_C.cshtml), vous pouvez lire la valeur de ViewDataDictionary et définir un champ de saisie à l'intérieur d'un form. Lorsque vous soumettez le formulaire, cette valeur sera également envoyée. Vous pouvez avoir un paramètre dans votre http méthode d'action post qui recevra cette valeur de champ de saisie et à l'aide que vous pouvez rediriger conditionnellement à la page 1 ou la page 2.

@model LoginViewModel 
@using (Html.BeginForm("Login","Home")) 
{ 
    <input type="hidden" name="withRedirect" value="@ViewData["WithRedirect"]" /> 
    @Html.LabelFor(f=>f.Password) 
    @Html.TextBoxFor(x=>x.Password) 
    <input type="submit" /> 
} 

et maintenant dans votre méthode d'action

[HttpPost] 
public ActionResult Login (LoginViewModel model,bool withRedirect) 
{ 
    //to do : Do something 
    if(withRedirect) 
    { 
     return RedirectToAction("Index","Page1"); 
    } 
    return RedirectToAction("Index","Page2"); 
}