1

Espoir de bien vouloir peut me aider, il peut être une question simple mais me frustré car il n'y a pas de solution pour elle,comment envoyer champ caché au contrôleur par modèle de liaison

Je veux passer la valeur d'un champ caché au contrôleur via le modèle de liaison, peu importe quelle approche j'utilise, juste passer la valeur de la vue au contrôleur via le modèle peut fonctionner pour moi,

c'est ma gamme de curseur

<label for="amount">دامنه قیمت:</label> 
 
<div id="connect" class="noUi-target noUi-ltr noUi-horizontal noUi-background"> 
 

 
</div>

c'est le champ caché,

<input type="hidden" name="MinPrice" value="@Model.MinPrice" id="MinPrice" /> 
 
<input type="hidden" name="MaxPrice" value="@Model.MaxPrice" id="MaxPrice" />

<script> 
 
    var connectSlider = document.getElementById('connect'); 
 

 
noUiSlider.create(connectSlider, { 
 
    start: [40000, 800000], 
 
    connect: true, 
 
    range: { 
 
    'min': 0, 
 
    'max': 2000000 
 
    } 
 
}); < /script> 
 
     <script> 
 
      var connectBar = document.createElement('div'), 
 
       connectBase = connectSlider.querySelector('.noUi-base'); 
 

 
      // Give the bar a class 
 
for styling and add it to the slider. 
 
connectBar.className += 'connect'; 
 
connectBase.appendChild(connectBar); 
 

 
connectSlider.noUiSlider.on('update', function(values, handle, a, b, handlePositions) { 
 

 
    var offset = handlePositions[handle]; 
 

 
    // Right offset is 100% - left offset 
 
    if (handle === 1) { 
 
    offset = 100 - offset; 
 
    } 
 

 
    // Pick left for the first handle, right for the second. 
 
    connectBar.style[handle ? 'right' : 'left'] = offset + '%'; 
 
}); < /script> 
 
     
 

 
     <script> 
 

 

 
      var valueInput = document.getElementById('MinPrice'), 
 
       valueSpan = document.getElementById('MaxPrice'); 
 

 
      // When the slider value changes, update the input and span 
 
connectSlider.noUiSlider.on('update', function(values, handle) { 
 
    if (handle) { 
 
    valueInput.value = values[handle]; 
 
    } else { 
 
    valueSpan.innerHTML = values[handle]; 
 
    } 
 
}); 
 

 
// When the input changes, set the slider value 
 
valueInput.addEventListener('change', function() { 
 
    connectSlider.noUiSlider.set([null, this.value]); 
 
}); 
 

 

 
< /script>

ceci est mon JS qui remplissent le champ caché, ces deux champs sont remplis correctement, mais ne pas envoyer de données au contrôleur via le modèle,

vous remercie tous pal,

Mise à jour

ceci est mon modèle:

public class SearchModel 
{ 
    public string Devision { get; set; } 
    public string Gender { get; set; } 
    public int? MinPrice { get; set; } 
    public int? MaxPrice { get; set; } 
    public string Brand { get; set; } 
    public string Sport { get; set; } 
    public string Size { get; set; } 
    public string ProductGroup { get; set; } 
    public List<tblSiteItem> Result { get; set; } 
    public List<tblSiteItem> Sales { get; set; } 
    public List<string> Devisions { get; set; } 
    public List<string> Genders { get; set; } 
    public List<string> Brands { get; set; } 
    public List<string> Sports { get; set; } 
    public List<string> Sizes { get; set; } 
    public List<string> ProductGroups { get; set; } 
    public List<tblSiteCart> CartItems { get; set; } 
    public int PageNo { get; set; } 
    public int Barcode { get; set; } 
} 

Comme je l'ai dit la valeur est correctement remplie, donc je ne ai pas besoin du code pour le rendre Corrigé, ne liez pas hdnValue au champ dans mon modèle. Je veux dire MinPrice et MaxPrice.

Edité Je ne suis pas autorisé à télécharger des images, malheureusement, si je tout était assez évident à regarder, toute façon, j'expliquer les détails:

  1. quand je change la slideBar, mes feux JS et les valeurs changent,

  2. lorsque je clique sur le bouton de recherche tous les champs de mon modèle est champ à l'exception de ces deux champ, je veux dire MinPrice et MaxPrice

  3. résultat montre une page vide, encore une fois mes Js continuent à feu puis revenir aux valeurs par défaut,

dans le dernier essai j'ai changé le champ masqué type = « text » et scie que lorsque je change la barre de défilement, la valeur est dans ma zone de texte mais pas liée à mon modèle de vue lorsque je touche le bouton de recherche.

Je suis sûr qu'il ya quelque chose de mal avec mon viewmodel, mais comment je peux comprendre ce qui est incorrect :(s'il vous plaît jeter un regard bienveillant à mon code

Répondre

0

Utilisez ce code pour obtenir la valeur:

var userRole = ""; 
 
userRole = $("#hdnVal").val(); 
 
alert(userRole);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="hidden" id="hdnVal" value="@Model.MinPrice" />

+0

dans votre exemple vous avez écrit Votre valeur Je m'attends à être un Model.MinPrice, avec ce que je m'attends à voir mon modèle est rempli avec ce données dans le contrôleur – sariiia

+0

** Essayez ceci: ** Au lieu de value = "YourValue" vous pouvez mettre value = "@ Model.MinPrice". –

+0

J'ai testé cela aussi mais pas de succès, s'il vous plaît consulter le post mis à jour, merci pour votre temps mon ami – sariiia

0

Suivre ce sujet.

Sur la page .cshtml

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <input type="hidden" id="hdnVal" value="@Model.MinPrice" /> <input type="button" name="Submit" value="Submit" id="btnSubmit" class="btn btn-primary" />

Js

var userRole = ""; 
userRole = $("#hdnVal").val(); 
alert(userRole); 
$('#btnSubmit').click(function() { 
     var formData = new FormData(); 
     formData.append("userRole ", userRole); 
     $.ajax({ 
     type: "POST", 
     url: "/Controller/YourAction/", 
     data: formData, 
     dataType: 'json', 
     contentType: false, 
     processData: false, 
     success: function(result) { 
      if (result.Message == "success") { 
      alert("Success"); 
      } 
     } 
     }); 

    } 

code C#

public JsonResult YourAction() 
{ 
string Role = Request.Form["userRole "]; 
//You can get the value of role 
} 
+0

s'il vous plaît regarder la section mise à jour, je ne ai pas besoin d'avoir un hdnField dans le contrôleur, à la place un modèle qui a un champ être rempli avec hdnField, model.Minprice = hdnValue – sariiia

0

Les noms de vos entrées sont incorrects. Vous devez supprimer la pièce Model.. Si vous avez utilisé HtmlHelper.HiddenFor, vous obtiendrez les éléments suivants:

<input type="hidden" name="MaxPrice" value="@Model.MaxPrice" id="MaxPrice" /> 

De cette façon, les entrées vont se soumis à votre modèle correctement.

Jetez un oeil à this answer.

+0

cela ne fonctionne pas, je ne sais pas quel est le problème, j'ai d'autres domaines que vous pouvez voir dans mon modèle qu'ils fonctionnent, mais ce caché ... – sariiia

+0

J'ai également utilisé ceci: @ Html.HiddenFor (m => m.MinPrice, nouveau {id = "MinPrice", Value = @ Model.MinPrice}), mais il ne remplit pas MinPrice avec le hdnValue, – sariiia

+0

C'est vraiment étrange .. Are vous êtes sûr que les valeurs sont correctement mises à jour avant de soumettre le formulaire? – Dygestor