Sto tentando di utilizzare una chiamata Ajax (credo) per aggiornare il valore del mio modello e quindi avere il nuovo valore riflesso nella vista. Sto solo usando questo a scopo di test per il momento.Aggiornamento visualizzazione con modifiche del modello tramite Ajax Post - MVC3
Ecco il riepilogo:
MODELLO
public class MyModel
{
public int Integer { get; set; }
public string Str { get; set; }
}
CONTROLLER
public ActionResult Index()
{
var m = new MyModel();
return View("Test1", m);
}
[HttpPost]
public ActionResult ChangeTheValue(MyModel model)
{
var m = new MyModel();
m.Str = model.Str;
m.Str = m.Str + " Changed! ";
m.Integer++;
return View("Test1", m);
}
VISTA
@model Test_Telerik_MVC.Models.MyModel
@using Test_Telerik_MVC.Models
@{
ViewBag.Title = "Test1";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>
Test1</h2>
@if (false)
{
<script src="~/Scripts/jquery-1.4.4.min.js" type="text/javascript"></script>
<script src="~/Scripts/jquery-ui.min.js" type="text/javascript"></script>
}
<h2>
ViewPage1
</h2>
<div>
<input type="button" onclick="changeButtonClicked()" id="changeButton" value="Click Me!" />
<input type="text" value="@Model.Str" class="txt" id="str" name="Str"/>
<div></div>
</div>
<script type="text/javascript">
function changeButtonClicked() {
var url = '@Url.Action("ChangeTheValue", "Test1")';
var data = '@Model';
$.post(url, data, function (view) {
$("#Str").value = '@Model.Str';
});
}
</script>
Fondamentalmente la vista esegue il rendering di un pulsante con una casella di testo. Il mio unico scopo è semplicemente visualizzare il valore del mio modello (proprietà Str) nella casella di testo.
Ho provato varie combinazioni della funzione changeButtonClicked() senza alcun risultato. Test1 è il nome del mio controller. Quello che non capisco è quando eseguo il debug, l'azione del controller si attiva e imposta correttamente i miei valori. Se metto un breakpoint nella sezione "@ Model.Str" del tag di input, mi mostra che il mio @ Model.Str è uguale a Changed! che è corretto. Tuttavia, non appena la mia funzione di successo si attiva in javascript, il valore ritorna al suo valore originale.
Posso farlo funzionare cambiando il tipo di input da inviare e avvolgendolo in una sezione @ Html.BeginForm() ma mi chiedo se/come farlo in questo modo? O è un Submit l'unico modo per realizzarlo?
Grazie
Mate, è fantastico. Corro attraverso quello che hai detto un po 'più tardi e ti faccio sapere. Spero che ciò che hai descritto funzioni. Cheers – Jason
ok, ce l'ho fatta. JSon come dici tu è la strada da percorrere in questo caso. Tuttavia, l'impostazione specifica del valore indica ancora che il mio oggetto "Modello" non contiene mai i valori aggiornati? Quindi, se mi riferisco ad esso in un altro evento (diciamo dopo che questo è stato attivato), @ Model.Str in realtà non contiene il nuovo valore. Perché ciò avvenga, devo presentare? Grazie per la tua risposta finora. Risponde alla mia domanda iniziale. – Jason
Se vuoi ottenere l'ultimo valore dei tuoi input, vorrai ottenerli dall'input stesso, puoi farlo con jQuery $ (# Str) .val(). Altrimenti, se stai utilizzando Model.Str da qualche altra parte nel tuo codice javascript, quel valore di Model.Str viene impostato quando la pagina viene caricata per la prima volta e non verrà mai aggiornata, a meno che non si aggiorni una pagina intera. – ajrawson