2017-05-29 2 views
0

J'utilise javascript pour appeler le contrôleur pour traiter une fonction. La valeur du paramètre (nom en résumé) est nulle lorsque le champ est privé. Cela fonctionne lorsque le champ est défini sur public. Est-ce que le public est le seul moyen? ou il y a une meilleure façon de le faire? merci d'avance.javascript call Paramètre MVC Controller toujours NULL lorsque le champ d'objet est privé

Mon objet

[DataContract] 
public class Summary 
{ 
[DataMember] 
public int id { private set; get; } 
[DataMember] 
public string name { private set; get; } 

public summary() {} 

public summary(int id, string name) 
{ 
    id = id; 
    name = name; 
} 

} 

MVC contrôleur

public ActionResult SetSummary(Summary summary) 
{ 
    string anme = summary.name; **<-- null if private** 
    ... 
} 

Javascript

$http.post("MyController/SetSummary", JSON.stringify({ 
      summary: mySummaryObject})) 
     .success(function (data, status, headers, config) { 
    .... 
    } 
+1

Oui, il doit être 'public' (les' DefaultModelBinder' Initialise une instance de votre modèle, puis définit ses propriétés - il ne peut pas le définir à moins que son «public») –

Répondre

0

yup, il devrait être rendu public b ecause defaultmodelbinder Mappe une requête de navigateur à un objet de données. Cette classe fournit une implémentation concrète d'un classeur modèle.

La classe DefaultModelBinder mappe les types d'objets suivants à une demande de navigateur:

types primitifs, tels que String, Double, décimal ou objets DateTime.

Classes de modèle, telles que Personne, Adresse ou Produit.

Collections, telles que ICollection, IList ou IDictionary.

Source: https://msdn.microsoft.com/en-us/library/system.web.mvc.defaultmodelbinder(v=vs.118).aspx

Espérons qu'il était utile de bien vouloir me connaître vos pensées ou des rétroactions

Merci

Karthik