Thursday, December 30, 2010

Wednesday, December 29, 2010

How to implement busy cursor in web forms by JQuery?

No validation:

            <asp:Button UseSubmitBehavior="false" OnClientClick="$('body').css('cursor', 'wait'); $('.Buttons').attr('disabled', 'true');"
                ID="ButtonBack" runat="server" Text="aa" ValidationGroup="novalidation"
                OnClick="ButtonBack_Click" />


With validation 

            <asp:Button UseSubmitBehavior="false" OnClientClick='if (Page_ClientValidate("vg")) { $("body").css("cursor", "wait"); $(".Buttons").attr("disabled", "true");}; '
                ID="ButtonReview" runat="server" Text="Next" OnClick="ButtonReview_Click"
                ValidationGroup="vg" />


And also add following code into master page or web forms page to reset cursor to normal, if validation failed
    <script type="text/javascript">
        function pageLoad() {
   $('body').css('cursor', 'auto');
        } 
    </script>



Saturday, December 25, 2010

How to solve “New transaction is not allowed because there are other threads running in the session” in Entity Framework

Make sure only call SaveChanges method once in the end, not inside loop.
Or covert collection to IList

Friday, December 24, 2010

How to use Ajaxupload in MVC

Client side:
1. Get the latest lib from http://valums.com/ajax-upload
2. Copy into your project
3. Add refrence in your aspx file:
<script src='<%=Page.ResolveClientUrl("~/Scripts/ajaxupload.3.6.js")%>' type="text/javascript"></script>
4. Add Javascript code to call ajaxupload
<script type="text/javascript">
$(document).ready(function() {
var button = $('#upload')[0], interval;
new AjaxUpload(button, {
action: '<%= Url.Relative("~/ControllerName/Save") %>',
name: 'myfile',
onSubmit: function(file, ext) {
if (!(ext && /^(doc|pdf|txt|xls)$/.test(ext))) {
alert('Error: invalid file extension');
return false;
}
button.value = 'Uploading';
this.disable();
interval = window.setInterval(function() {
var text = button.value;
if (text.length < 13) {
button.value = button.value + '.';
} else {
button.value = 'Uploading';
}
}, 200);
},
onComplete: function(file, response) {
button.value = 'Upload';

window.clearInterval(interval);
this.enable();
if (response == 'error')
alert('Error: File size is over limit (10mb). '+file);
else
//Dispaly uploaded file
},
responseType:'json'
});
});
</script>

Server side is very simple. Just create a Json action:
public JsonResult Save()
{
try
{
var files = this.HttpContext.Request.Files;
string filename = System.IO.Path.GetFileName(files[0].FileName);
files[0].SaveAs(filename);
return Json(null);
}
catch
{
return Json("error");
}
}