2009-09-04 9 views
1

Je souhaite mettre à jour un enregistrement dans ma base de données qui a deux valeurs, l'une est l'ID et l'autre est la "description". L'ID ne peut jamais être changé, mais je compte sur l'utilisation de fonctionnalités fortement typées pour le faire. Donc, je ai ce qui suit:Éléments de formulaire désactivés Mise à jour ASP.NET MVC

Inherits="System.Web.Mvc.ViewPage<Business>" 

Ce qui est bien, car cela me permet de tout récupérer. Le problème est quand j'utilise la ligne suivante:

<%= Html.TextBox("BusinessID", ViewData.Model.BusinessID, new { disabled = "disabled", style = "width:50px;", @class = "uppercase", maxlength = "4" })%> 

Avec l'option disabled = "disabled" il ne reconnaît pas le BusinessID® et ne passe pas donc au contrôleur qui, à son tour, a des problèmes de liaison vers le haut de l'objet.

Non que vous en aurez besoin, mais voici l'action du contrôleur:

[HttpPost] 
public ActionResult EditBusiness(Business business) 
{ 
    if (!ModelState.IsValid) 
    return View(business); 
    // update business here 
    _contractsControlRepository.UpdateBusiness(business); 
    return RedirectToAction("Businesses"); 
} 

Toutes les idées pourquoi cela se passe? Je n'ai pas réalisé que les éléments de formulaire étaient complètement masqués lors de la publication lorsqu'ils étaient désactivés. Je ne veux pas que les utilisateurs modifient ce champ particulier. J'ai aussi essayé Html.DisplayFor(b=>b.BusinessID) sans aucune chance.

Répondre

3

afficher l'ID comme celui-ci

Html.Hidden("BusinessID", ViewData.Model.BusinessID) 
<%=Model.BussinessID %> 

cette façon, vous aurez l'identifiant pour la liaison dans la balise cachée et vous affichera la valeur dans l'étiquette ou vous pouvez utiliser autre chose que vous voulez yo peut faire comme ça aussi

<input type="text" value="<%=Model.BussinessID %>" contentEditable="false"> 

et mettre le caché quelque part sous la forme

+0

Bingo, merci beaucoup. – Kezzer

+0

Aussi, d'après ce que vous m'avez donné, je peux juste créer un assistant pour le faire pour moi. – Kezzer

0

au lieu de Html.TextBox vous pouvez utiliser Html.Hidden ("BusinessID", ViewData.Model.BusinessID)

+0

Voir mon commentaire à griegs. – Kezzer

0

Y at-il une raison particulière que vous affichez l'id? Si ce n'est pas le cas, laissez-le sur votre contrôleur et utilisez simplement TryUpdateModel() à la place. Ou n'est-ce pas ce que vous demandez?

modifier

<%= Html.TextBox("name","value", null, new { style="readonly"}) %> 

Edit 2

Vous pourriez penser à faire une route comme // site/contrôleur/yourbusinessid

vous pouvez utiliser l'identifiant comme il est passé à votre contrôleur et vous pouvez alors, à votre avis, simplement utiliser <%= Model.BusinessId %> comme une chaîne.

+0

J'ai besoin d'afficher l'ID oui. L'ID n'est pas une valeur entière, c'est un champ varchar saisi manuellement que l'utilisateur doit voir à l'écran lors de l'édition. – Kezzer

+0

dans ce cas pouvez-vous utiliser dans votre nouvelle zone de texte {style = "readonly"}? – griegs

0

Vous avez toujours la possibilité soit "coder en dur" l'élément html, ou écrire votre propre méthode d'aide html pour le faire.

public static string DisabledTextBox(this HtmlHelper helper, string name, object value) 
{ 
    return String.Format(@"<input type="text" name="{0}" id="{0}" disabled="disabled" value="{1}" />", name, value); 
} 
Questions connexes