2013-08-15 5 views
13

आई! मैं मॉडल के बाहर डेटा के साथ आंशिक दृश्य कैसे रीफ्रेश कर सकता हूं? पहली बार, जब पृष्ठ लोड करता है तो यह ठीक से काम कर रहा है, लेकिन जब मैं इसे क्रिया से नहीं कहता हूं। संरचना मेरे द्वारा बनाए गए लगता है:पार्टिकल व्यू एमवीसी अपडेट करना 0

@{ Html.RenderAction("UpdatePoints");} 

मेरे PartialView "UpdatePoints":

मेरे विचार में कहीं भी

<h3>Your points are @ViewBag.points </h3> 

नियंत्रक पर मेरे पास है:

public ActionResult UpdatePoints() 
     { 

      ViewBag.points = _Repository.Points; 
      return PartialView("UpdatePoints"); 
     } 

आपकी मदद के लिए धन्यवाद!

अद्यतन

सब तुम्हारी मदद के लिए धन्यवाद! आखिर में मैंने JQuery/AJAX का उपयोग किया जैसा कि आपने सुझाव दिया है, मॉडल का उपयोग करके पैरामीटर पास कर रहा है।

तो, जे एस में:

$('#divPoints').load('/Schedule/UpdatePoints', UpdatePointsAction); 
var points= $('#newpoints').val(); 
$element.find('PointsDiv').html("You have" + points+ " points"); 

नियंत्रक में:

var model = _newPoints; 
return PartialView(model); 

देखें

<div id="divPoints"></div> 
@Html.Hidden("newpoints", Model) 
+0

क्या आप इसके लिए AJAX का उपयोग करना चाहते हैं? –

+0

आपका प्रश्न स्पष्ट नहीं है, यह कब काम करता है और यह कब नहीं करता? हमें –

उत्तर

15

तो, कहते हैं कि तुम PartialView, जो अद्यतन किया जाना है के साथ अपने दृश्य है में बटन क्लिक करके:

<div class="target"> 
    @{ Html.RenderAction("UpdatePoints");} 
</div> 

<input class="button" value="update" /> 

ऐसा करने के कुछ तरीके हैं। उदाहरण के लिए आप jQuery का उपयोग कर सकते हैं:

<script type="text/javascript"> 
    $(function(){  
     $('.button').on("click", function(){   
      $.post('@Url.Action("PostActionToUpdatePoints", "Home")').always(function(){ 
       $('.target').load('/Home/UpdatePoints');   
      })   
     }); 
    });   
</script> 

PostActionToUpdatePoints अपने Action साथ [HttpPost] विशेषता है, जो आपको

आप अपनी कार्रवाई UpdatePoints में तर्क का उपयोग करते हैं() अंक अद्यतन करने के लिए अंक अद्यतन करने के लिए इस्तेमाल करते हैं, तो शायद आप भूल गया इसमें [HttpPost] विशेषता जोड़ें:

[HttpPost] 
public ActionResult UpdatePoints() 
{  
    ViewBag.points = _Repository.Points; 
    return PartialView("UpdatePoints"); 
} 
+4

दोनों लोगों के लिए उपयोग कर रहे कोड को दिखाएं, यह समाधान काम करता है। हालांकि कुछ मरम्मत। यदि आप HttpPost एनोटेशन डालते हैं तो आप jquery लोड फ़ंक्शन के माध्यम से प्राप्त करने में सक्षम नहीं होंगे। एनोटेशन हटा दें। "लोड" फ़ंक्शन लोअरकेस है। और पोस्ट विधि od $ post के बजाय "$ .post" है। इस छोटी सी चीजों को ठीक करें और यह एक आकर्षण की तरह काम करेगा – Nelssen

1

आपकी मदद के लिए धन्यवाद! अंत में मैंने मॉडल का उपयोग करके पैरामीटर को पारित करते हुए JQuery/AJAX का उपयोग किया था।

तो, जे एस में:

$('#divPoints').load('/Schedule/UpdatePoints', UpdatePointsAction); 
var points= $('#newpoints').val(); 
$element.find('PointsDiv').html("You have" + points+ " points"); 

नियंत्रक में:

var model = _newPoints; 
return PartialView(model); 

देखें में

<div id="divPoints"></div> 
@Html.Hidden("newpoints", Model) 
7

आप भी इस कोशिश कर सकते हैं।

$(document).ready(function() { 
      var url = "@(Html.Raw(Url.Action("ActionName", "ControllerName")))"; 
      $("#PartialViewDivId").load(url); 
     setInterval(function() { 
      var url = "@(Html.Raw(Url.Action("ActionName", "ControllerName")))"; 
      $("#PartialViewDivId").load(url); 
     }, 30000); //Refreshes every 30 seconds 

     $.ajaxSetup({ cache: false }); //Turn off caching 
    }); 

यह div लोड करने के लिए एक प्रारंभिक कॉल करता है, और उसके बाद आगामी कॉल 30 सेकंड के अंतराल पर हैं।

नियंत्रक अनुभाग में आप ऑब्जेक्ट को अपडेट कर सकते हैं और ऑब्जेक्ट को आंशिक दृश्य में पास कर सकते हैं।

public class ControllerName: Controller 
{ 
    public ActionResult ActionName() 
    { 
     . 
     . // code for update object 
     . 
     return PartialView("PartialViewName", updatedObject); 
    } 
} 
संबंधित मुद्दे