मैं अपने मॉडल मूल्य को अपडेट करने के लिए अजाक्स (मुझे लगता है) कॉल का उपयोग करने की कोशिश कर रहा हूं और फिर उस नए मूल्य को दृश्य में प्रतिबिंबित किया गया है। मैं इस पल के लिए परीक्षण उद्देश्यों के लिए इसका उपयोग कर रहा हूं।अजाक्स पोस्ट के माध्यम से मॉडल परिवर्तनों के साथ दृश्य अपडेट करना - एमवीसी 3
यहाँ अवलोकन है:
मॉडल
public class MyModel
{
public int Integer { get; set; }
public string Str { get; set; }
}
नियंत्रक
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);
}
देखें
@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>
मूल रूप से दृश्य टेक्स्टबॉक्स के साथ एक बटन प्रस्तुत करता है। मेरा एकमात्र उद्देश्य टेक्स्टबॉक्स में बस मेरे मॉडल (स्ट्र प्रॉपर्टी) के मूल्य को प्रदर्शित करना है।
मैंने परिवर्तन के विभिन्न संयोजनों की कोशिश की है बटन बटन() फ़ंक्शन का कोई फायदा नहीं हुआ। टेस्ट 1 मेरे नियंत्रक का नाम है। जो मुझे समझ में नहीं आता है वह है जब मैं इसे डीबग करता हूं, नियंत्रक कार्रवाई आग लगती है और मेरे मान सही ढंग से सेट करती है। यदि मैं इनपुट टैग के "@ Model.Str" अनुभाग पर ब्रेकपॉइंट डालता हूं, तो यह मुझे दिखाता है कि मेरा @ मॉडल.tr बदल गया है! क्या सही है। हालांकि, जैसे ही मेरी सफलता कार्य जावास्क्रिप्ट में आग लगती है, वैसे ही मूल्य वापस इसके मूल मूल्य पर वापस आ जाता है।
मैं इसे @ html.BeginForm() सेक्शन में सबमिट और लपेटने के लिए इनपुट प्रकार को बदलकर इसे काम कर सकता हूं लेकिन मुझे आश्चर्य है कि यह इस तरह से कैसे किया जाए? या इसे पूरा करने का एकमात्र तरीका सबमिट करें?
धन्यवाद
मेट, यह कमाल है। मैं थोड़ी देर बाद जो कुछ कहा है उसके माध्यम से भागूंगा और आपको बता दूंगा। मैं आशा करता हूं कि आपने जो वर्णन किया है वह काम करता है। चीयर्स – Jason
ठीक है, मैं यह काम कर रहा हूँ। जैसा कि आप कहते हैं JSON इस उदाहरण में जाने का तरीका है। हालांकि, मान को विशेष रूप से अभी भी निर्धारित करना है कि मेरा "मॉडल" ऑब्जेक्ट में अद्यतन मान कभी नहीं हैं? तो अगर मैं इसे किसी अन्य घटना में संदर्भित करता हूं (इसके बाद कहें तो इसे निकाल दिया गया है), @ Model.Str में वास्तव में नया मान नहीं है। ऐसा होने के लिए, मुझे जमा करने की आवश्यकता है? अब तक आपके उत्तर के लिए धन्यवाद। यह मेरे प्रारंभिक प्रश्न का उत्तर देता है। – Jason
यदि आप अपने इनपुट का नवीनतम मूल्य प्राप्त करना चाहते हैं तो आप उन्हें इनपुट से ही प्राप्त करना चाहते हैं, आप इसे jQuery $ (# Str) .val() के साथ प्राप्त कर सकते हैं। अन्यथा यदि आप अपने जावास्क्रिप्ट कोड में कहीं और Model.Str का उपयोग कर रहे हैं, तो मॉडल एसआरटी का वह मान सेट किया जा रहा है जब पृष्ठ पहले लोड होता है और कभी अपडेट नहीं होता है, जब तक कि आप एक पूर्ण पृष्ठ रीफ्रेश नहीं करते। – ajrawson