Integrate CKEditor and CKFinder

Bài viết dưới đây hướng dẫn cách tích hợp CKEditor và CKFinder trong ASP.NET MVC. Các bước thực hiện:

  1. Download CKEditor ở địa chỉ CKEditor 4.5.11
  2. Download CKFinder ở địa chỉ CKFinder
  3. Giải nén và copy 2 thư mục CKEditor và CKFinder vào trong thư mục gốc của website, ví dụ cấu trúc ứng dụng web là CMS thì 2 thư mục CKEditor và CKFinder sẽ là (nhớ xóa hết các file source của ckedit và ckfinder):
    • CMS\ckeditor
    • CMS\ckfinder
  4. Chèn scripts vào View cần tạo CKeditor và CKFinder

@section scripts
{
http://~/ckeditor/ckeditor.js
http://~/ckfinder/ckfinder.js
}

5. Chèn CKeditor vào View như sau

@Html.LabelFor(model => model.Content, htmlAttributes: new { @class = “control-label col-md-2” })

@Html.TextAreaFor(model => model.Content, new { htmlAttributes = new { @class = “form-control” } })
@Html.ValidationMessageFor(model => model.Content, “”, new { @class = “text-danger” })

</div>

6. Bổ sung script để tạo CKeditor và tích hợp CKFinder

var editor = CKEDITOR.replace(‘Content’); //Tạo CKEditor
CKFinder.setupCKEditor(editor, ‘/ckfinder/’);//Tích hợp CKFinder

Html.Partial vs RenderPartial vs Action

Bài dưới đây chỉ ra sự khác nhau giữa các cách dùng PartialView trong ASP.NET MVC

Render Partial View:

Có nhiều cách để render Partial View, tuy nhiên mỗi cách có mục đích sử dụng riêng: Partial() or RenderPartial() or RenderAction():

Html.Partial()

@Html.Partial() render ra một partial view, khi gọi @Html.Partial() sẽ trả về một chuỗi và chèn vào trang (ở vị trí gọi @Html.Partial()) trước khi trang được hiển thị ra trình duyệt.

@Html.RenderPartial()

@RenderPartial với mục đích tương tự như Partial() là render ra một Partial View, điểm khác biệt giữa RenderPartial và Partial là nó trả về void, kết quả trả về ghi trực tiếp ra Response stream.

Html.RenderAction()/Action():

@RenderAction() gọi action của controller và trả về kết quả là một partial view.

Cách chèn thêm css hoặc js file cho từng view trong ASP.NET MVC

Hướng dẫn dưới đây chỉ ra cách chèn thêm css hoặc js vào trong từng view

1. Trong _layout.cshtml chèn thêm @RenderSection – css trong phần head của trang

<head>
<meta charset=”utf-8″ />
<meta name=”viewport” content=”width=device-width, initial-scale=1.0″>
<title>@ViewBag.Title – My ASP.NET Application</title>
@Styles.Render(“~/Content/css”)
@Scripts.Render(“~/bundles/modernizr”)
@RenderSection(“css”, false)
</head>

2. Trong _layout.cshtml chèn thêm @RenderSection – scripts trong phần cuối của trang, trước thẻ body

@Scripts.Render(“~/bundles/jquery”)
@Scripts.Render(“~/bundles/bootstrap”)
@RenderSection(“scripts”, required: false)
</body>

Sau đó trong view cần thêm css hoặc js file, chèn thêm phần @section và chèn css hoặc js tương ứng

@section scripts
{
//cdn.datatables.net/1.10.12/js/jquery.dataTables.js

$(document).ready(function () {
$(‘#table_id’).DataTable();
});

}
@section css
{
<link rel=”stylesheet” type=”text/css” href=”//cdn.datatables.net/1.10.12/css/jquery.dataTables.css”>
}

Role based security in ASP.NET MVC5

Bài này hướng dẫn xây dựng xây dựng Role based security trong ASP.NET MVC5 kết hợp ASP.NET Identity có fix lỗi (nếu tham khảo hướng dẫn của các bài viết).

Bài này hoàn thành gồm các chức năng:

  • Register
  • Create a new role 
  • AddUserToRole
  • Edit role
  • Delete role
  • List all roles
  • List all roles was assigned for the user
  • Update role

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult RoleAddToUser(string UserName, string RoleName)
{
ApplicationUser user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault();
//var account = new AccountController();
//account.UserManager.AddToRoleAsync(user.Id, RoleName);
if (user != null) UserManager.AddToRole(user.Id, RoleName);
ViewBag.ResultMessage = “Role created successfully !”;

// prepopulat roles for the view dropdown
var list = context.Roles.OrderBy(r => r.Name).ToList().Select(rr => new SelectListItem { Value = rr.Name.ToString(), Text = rr.Name }).ToList();
ViewBag.Roles = list;

return View(“ManageUserRoles”);
}
public ApplicationUserManager UserManager
{
get { return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); }
private set {_userManager = value; }
}
private ApplicationUserManager _userManager;

Link download mã nguồn

The Microsoft.Jet.OLEDB.4.0 – Microsoft.ACE.OLEDB.12.0 provider is not registered on the local machine

Khi sử dụng OLEDB gặp lỗi sau:

The Microsoft.Jet.OLEDB.4.0 hoặc Microsoft.ACE.OLEDB.12.0 provider is not registered on the local machine.

Nguyên nhân lỗi là do máy tính hiện tại đang sử dụng Offices 32 bit nhưng mặc định biên dịch của Visual Studio là Any CPU.

Để giải quyết vấn đề đó, thực hiện theo các hướng dẫn sau:

  • Chọn Project > Properties
  • Trong Tab Build, chọn Build – General
    • Platform target: chọn x86
    • Hình ảnh minh họa

target

  • Menu Build > Rebuild để biên dịch lại dựa án

Thông tin chuỗi kết nối – ConnectionString cấu hình như sau:

ConnectionString = “Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 8.0;data source= fullFileName”;

RememberMe? trong windows forms với C#

Trong cửa sổ login, thường chúng ta hay thấy có hộp checkbox cho phép người dùng ghi nhớ mật khẩu để lần sau không cần phải gõ lại, điều này sẽ thuận tiện cho người dùng khá nhiều.

Đoạn code dưới đây hướng dẫn chúng ta cách thực hiện chức năng RememberMe trong windows forms với C#

Trước hết, chọn Project Solution > Properties > Add thêm các thiết  lập:

settings

  •  Viết code để Lưu và đọc settings từ file .config

ReadSettings() method

private void ReadSettings()
{
if (Properties.Settings.Default.RememberMe == “true”)
{
tbLoginID.Text = Properties.Settings.Default.UserName;
tbPassword.Text = Properties.Settings.Default.Password;
chkRememberMe.Checked = true;
}
else
{
tbLoginID.Text = “”;
tbPassword.Text = “”;
chkRememberMe.Checked = false;
}
}

SaveSettings() method

private void SaveSettings()
{
if (chkRememberMe.Checked)
{
Properties.Settings.Default.UserName = this.tbLoginID.Text;
Properties.Settings.Default.Password = this.tbPassword.Text;
Properties.Settings.Default.RememberMe = “true”;
Properties.Settings.Default.Save();
}
else
{
Properties.Settings.Default.UserName = this.tbLoginID.Text;
Properties.Settings.Default.Password = “”;
Properties.Settings.Default.RememberMe = “false”;
Properties.Settings.Default.Save();
}
}

Code trong form load

//Code for loading form

//Read settings
ReadSettings();

Code trong nút Login của form

//Code for login function

//Save settings
SaveSettings();

 

Nuget.config Error – Lỗi Nuget.config sau khi nâng câp VS 2015 community

Sau khi nâng cấp Visual Studio 2015 thì gặp phải lỗi sau: 

NuGet.Config is not valid XML PATH:

‘C:\Users\[Ten_Nguoi_Dung]\AppData\Roaming\NuGet\NuGet.Config’.

“.”,hexadecimal value 0x00, is an invalid character. Line 1, position 1.

I can not open the config file in any text editor. It open in Visual Studio as hexadecimal numbers.

I tried downloading and install NuGet and still the same results, and the same with uninstalling and reinstalling Visual Studio 2015 community.

This problem seems to have occurred after setting up Visual Studio for developing C/C++ applications.

Để khắc phục lỗi, cách đơn giản nhất và xóa luôn file Nuget.config trong thư mục ‘C:\Users\[Ten_Nguoi_Dung]\AppData\Roaming\NuGet\