2013-06-07 3 views
9

मैं अपनी कंपनी से कुछ डेटा प्रबंधित करने के लिए एक वेब सिस्टम लागू कर रहा हूं। हम एमवीसी (अधिक स्पष्ट रूप से एएसपी.नेट एमवीसी 4) का उपयोग कर रहे हैं, जिसमें मैं पूरी तरह से नया हूं।एमवीसी (एएसपी.नेट) में ऑटोसेव

मेरी समस्या यह है कि हमने जीमेल की तरह ऑटोओव का उपयोग करने की योजना बनाई है। हम परिवर्तन घटनाओं कतार का उपयोग करने की योजना बना रहे थे और एक बार थोड़ी देर में AJAX के माध्यम से परिवर्तन जमा करते थे। पहले विचार पर मैं जावास्क्रिप्ट का उपयोग करता हूं, यह सुनिश्चित नहीं करता कि यद्यपि यह एमवीसी के लिए सबसे अच्छा तरीका है। मेरे पास एक और समस्या यह है कि उपयोगकर्ता द्वारा दर्ज की जाने वाली कुछ जानकारी फॉर्म के अंदर नहीं है, बल्कि इसके बजाय तालिका में है। पृष्ठ का लेआउट थोड़ा सा स्पैस है और मुझे विश्वास नहीं है कि मैं सभी इनपुट को एक ही रूप में लपेट सकता हूं या यहां तक ​​कि अगर मुझे ऐसा करना चाहिए।

मेरे प्रश्न हैं:

  1. स्वतः सहेजना लागू करने के लिए सबसे अच्छा तरीका है MVC का उपयोग कर क्या है, मैं का उपयोग करना चाहिए या नहीं जावास्क्रिप्ट?
  2. क्या जावास्क्रिप्ट में कोई लाइब्रेरी है या कतार में लागू करने के लिए एएसपी.नेट एमवीसी में एक सुविधा है या क्या मुझे इसे हाथ से करना चाहिए?
  3. इसके अलावा, क्या मैं तालिका पंक्तियों को लपेटने के लिए फॉर्म का उपयोग कर सकता हूं?

नोट: मैंने स्थानीय स्टोरेज या अन्य क्लाइंट दृढ़ता का उपयोग करने के लिए कुछ सुझाव देखे हैं, लेकिन मुझे जो चाहिए वह सर्वर दृढ़ता है, और हमारे पास पृष्ठ पर एक सेव बटन भी नहीं है।

अग्रिम में मदद के लिए धन्यवाद;)

उत्तर

11

आप form="myformid" उन तत्वों को विशेषता दे सकते हैं जो इसे फ़ॉर्म में शामिल करने के लिए बाहर हैं। मैं शुरुआत में सभी तत्वों को data-dirty="false" विशेषता जोड़ूंगा और परिवर्तन ईवेंट संलग्न करूंगा जो बदलते तत्व की डेटा-गंदे विशेषता को सत्य में बदल देगा। फिर आप उदाहरण के लिए प्रत्येक 30 सेकंड फॉर्म को सहेज सकते हैं (उन तत्वों को प्राप्त करें जिनमें डेटा-परिवर्तन = सत्य है और सर्वर पर पास करें)। सहेजने के बाद, प्रत्येक तत्व का डेटा-गंदे फिर से झूठा हो जाता है। jQuery के साथ स्वतः सहेजना का उदाहरण:

window.setInterval(function(){ 
    var dirtyElements = $('#myformid').find('[data-dirty=true]').add('[form=myformid][data-dirty=true]'); 
    if(dirtyElements.length > 0){ 
     var data = dirtyElements.serialize(); 
     $.post('saveurl', data, function(){ 
      dirtyElements.attr('data-dirty', false); 
      alert('data saved successfully'); 
     }); 
    } 
}, 30000); // 30 seconds 

प्रपत्र के सभी तत्वों को घटना अटैच किया जा रहा:

$(function(){ 
    var formElements = $('#myformid') 
          .find('input, select, textarea') 
          .add('[form=myformid]') 
          .not(':disabled') 
          .each(function(){ 
           $(this).attr('data-dirty', false).change(function(){ 
            $(this).attr('data-dirty', true); 
           }); 
          }); 
}); 
+1

अन्य सभी anwsers वास्तव में महान थे, लेकिन आप प्राप्त की मुझे आपके डेटा-गंदे सुझाव पर। वास्तव में चालाक;) फॉर्म विशेषता का उपयोग करने के लिए भी वास्तव में अच्छा विचार है, उस – 7hi4g0

+1

@ 7hi4g0 के बारे में नहीं पता था, मुझे खुशी है कि मेरा जवाब मदद करता है, लेकिन फॉर्म विशेषता के साथ सावधान रहें, क्योंकि यह html5 सुविधा है और कुछ पुराने ब्राउज़र में समर्थित नहीं हो सकता है । – karaxuna

+0

यह उत्तर अच्छा है, लेकिन सत्यापन त्रुटियों के दौरान क्या होता है? यूआई में वापस लौटे और प्रदर्शित कैसे होते हैं? – Ben

1
  1. वास्तव में अपने ही एकमात्र विकल्प है कि। यदि आप अजाक्स के बिना फॉर्म जमा करते हैं तो आपको एक पूर्ण पृष्ठ रीलोड का अनुभव करने जा रहे हैं। ऐसा लगता है कि आप यही चाहते हैं।

  2. इसे कार्यान्वित करने के कई तरीके हैं (अभी भी उत्तर पोस्ट करक्सुना को भी देखें)। आप अपने सभी इनपुट में एक ईवेंट संलग्न कर सकते हैं और किसी भी समय डेटा को सहेजने के लिए टाइमर का उपयोग करने में से कोई भी बदल सकता है। यदि कोई अन्य परिवर्तन ईवेंट होता है तो टाइमर को रीसेट करें ताकि आप प्रत्येक परिवर्तन ईवेंट के लिए बचत समाप्त न करें।

    या यदि आपको जटिल होने की आवश्यकता नहीं है तो बस हर एक्स मिनट को बचाने के लिए एक साधारण टाइमर का उपयोग करें चाहे कोई नया डेटा दर्ज किया गया हो।

  3. आप form के भीतर एक टेबल डाल सकते हैं; उसमें कुछ भी गलत नहीं है। मैं बस उचित इनपुट का उपयोग करने का सुझाव दूंगा ताकि डेटा को क्रमबद्ध करना और सर्वर पर भेजना आसान हो।

1

आप अपने पृष्ठ और सर्वर के बीच गतिशील रूप से संवाद करने के लिए एक SignalR हब का उपयोग कर सकते हैं।इस तकनीक के विवरण के लिए https://github.com/SignalR/SignalR/wiki और http://signalr.net/ देखें।

इस तरह, आप सीधे सर्वर पर परिवर्तन ईवेंट भेज सकते हैं। आप जावास्क्रिप्ट में एक निर्माता-उपभोक्ता मॉडल का उपयोग करके उन्हें थ्रॉटल कर सकते हैं, लेकिन सिग्नलआर का प्रदर्शन इतना अच्छा है कि आपको ऐसा करने के बिना दूर जाने में सक्षम होना चाहिए।

आप एक फॉर्म के अंदर एक टेबल एम्बेड कर सकते हैं, लेकिन फिर, सिग्नलआर क्लाइंट-टू-सर्वर संचार के विभिन्न माध्यमों का उपयोग करता है।

शुभकामनाएं।

+0

वास्तव में दिलचस्प सुझाव;)।मैं अपनी टीम में पेश करूंगा और शायद हम इसे किसी अन्य प्रोजेक्ट पर इस्तेमाल करेंगे, लेकिन मुझे डर नहीं है:/ – 7hi4g0

+0

सिग्नलआर बहुत अच्छा है, लेकिन किसी के लिए एमवीसी 4 विकास –

1

1) जावास्क्रिप्ट का उपयोग करें! jQuery AJAX कॉल का उपयोग करके पृष्ठभूमि में असीमित रूप से आपके ऑटो को निष्पादित करने में काफी आसान बनाता है।

2) कोई भी जिसे मैं जानता हूं, लेकिन यह बहुत कठिन नहीं होना चाहिए।

3) कोई, दुर्भाग्य से आप नहीं कर सकते, लेकिन आप कुछ इस तरह कर सकता है:

<table id="mainTable"> 
<tr> 
    <td> 
    <form id="someForm"> 
     <table class="aSubTable"> 
     <tr> 
      <td><!-- fields go here --></td> 
      <td><!-- fields go here --></td> 
     </tr> 
     </table> 
    </form> 
    </td> 
<tr> 
</table> 

(मुझे पता है कि इस उदाहरण कोड रेजर का लाभ उठाने नहीं करता हूँ, लेकिन यह मुश्किल नहीं होना चाहिए यह पता लगाने की जो भागों अपने स्वयं के साधन के लिए रेजर)

2

उत्तर के साथ बदलने के लिए ...

  1. निश्चित रूप से जावास्क्रिप्ट का उपयोग और AJAX, आप पृष्ठ ताज़ा रखने के लिए नहीं करना चाहते हैं जब उपयोगकर्ता कोई परिवर्तन नहीं करता
  2. मुझे किसी भी पुस्तकालय के बारे में पता नहीं है, लेकिन मुझे हाथ से ऐसा करने में खुशी होगी। जावास्क्रिप्ट का उपयोग करके परिवर्तनों का पता लगाएं और फिर AJAX
  3. के माध्यम से डेटा पोस्ट करें आप FormCollection पैरामीटर, या क्लासिक Form["fieldname"] विधि के साथ अपने नियंत्रक से किसी भी फॉर्म फ़ील्ड तक पहुंच सकते हैं। जब तक आपके तालिका सेल अद्वितीय name मान आप डेटा
  4. लाने के लिए सक्षम हो जाएगा
0
अपने प्रश्न 1 के लिए ही

आंशिक जवाब: हाँ, सही बॉक्स से बाहर, MVC 4 जावास्क्रिप्ट के साथ अच्छा काम करने के लिए जा रहा है (jquery) और AJAX

उपर्युक्त उत्तर आपको कुछ तरीकों से दिखाते हैं कि आप अपने रेज़र दृश्यों में जावास्क्रिप्ट/AJAX लिखेंगे, फिर आप एक नियंत्रक से संचार करेंगे (जिसे "मॉडल" से डेटा प्राप्त करना चाहिए) पूरे .NET एमवीसी फ्रेमवर्क अनुभव में विभिन्न सेटिंग्स, web.config के साथ बंधे हैं, फिर आप परीक्षण कर सकते हैं जब आपके परिवर्तन मूल्य झूठे

उदाहरण ई

अपने web.config में

, आप

<appSettings> 
    <add key="webpages:Version" value="2.0.0.0" /> 
    <add key="webpages:Enabled" value="false" /> 
    <add key="PreserveLoginUrl" value="true" /> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
</appSettings> 

MVC 3 भी था देखेंगे यह बहुत अच्छी तरह से काम कर रहे:

<appSettings> 
    <add key="webpages:Version" value="1.0.0.0" /> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
</appSettings> 
0
we can Auto save form using Ajax 
function AutoSaveMyForm(spanid) { 
    var dataToPost = $("form").serialize() 
    $.ajax({ 
     type: "POST", 
     url: "/MyController/AutoSaveActionMethod", 
     data: dataToPost, 
     cache: false, 
     success: function(resultdata) { 
      if (resultdata['Code'] == '1') { // show success saved 
       console.log(resultdata['ResultMsg']); 
       if (spanid == "SaveLastStep") { 
        window.location = "/Dashboard/Index"; 
       } 
       $('#' + spanid).html('Save Successfully.'); 
      } else if (resultdata['Code'] == '0') { // show error 
       console.log(resultdata['ResultMsg']); 
       $('#' + spanid).html('Not Saved'); 
      } else { // an error has occured 
       $('#' + spanid).html('Error Generated.'); 
      } 
     } 
    }); 
} 

window.setInterval(function() { 
    AutoSaveMyForm('SpanIdToShowResult') 
}, 60000); // 1 min 

By using set interval method we can call javascript method which call ajax to save form and pass any span id to get result back 
+0

शुरू करने के लिए कुछ विवरण जोड़ें। यह सिर्फ कोड के एक टुकड़े से मददगार होगा। – Billa

संबंधित मुद्दे