ASP.NET MVC 应用程序初学者常见问题汇总
Q: 如何为Html.TextBoxFor控件添加多个属性?
A: @Html.TextBoxFor(m => m.Email, new Dictionary<string, object>() { {"class", "input-material" }, {"data-msg", "Please enter your username" },{ "required", "true"} })
Q: 如何为输出HTML格式的字符串?
A: 输出HTML格式的文本主要使用@Html.Raw。如果文本是Model的属性:@Html.Raw(Model.HTMLText);如果文本是@foreach中的子项属性:@Html.Raw(item.HTMLText)
Q: 如何在视图中添加下拉框?
A: @Html.DropDownListFor(m => m.PropertyName, ViewBag.PropertyList as List<SelectListItem>, "-请选择-"),第三个参数用于在下拉框中添加一个默认值。
var propertyList = new List<SelectListItem>(); propertyList.Add(new SelectListItem() { Text = "", Value = "" }); ViewBag.PropertyList=propertyList;
Q: 如何使用input标签上传文件?
A: 视图文件内容
@using(Html.BeginForm("Upload","Home",FormMethod.Post,new { enctype = "multipart/form-data" })) { <input type="file" id="fileupload" name="fileupload" size="25" /><input type="submit" value="上传"/> }
Action核心代码
var file = Request.Files["fileupload"]; var newFileName = file.FileName.Substring(file.FileName.LastIndexOf(@"") + 1); var filepath = "/Uploads/" + Guid.NewGuid() + newFileName; file.SaveAs(Server.MapPath(filepath));
Q: 如何扩展User.Identity的可用方法(类似GetUserName方法)?
A:C#3.0时引入了扩展方法(Extension Methods)特性,由于User.Identity为IIdentity接口,因此,我们只需要扩展IIdentity接口的方法即可。
在模型文件夹中创建一个名为Extensions的新文件夹,并在Extensions文件夹中添加一个新类:IIdentityEx.cs
using System.Security.Claims; using System.Security.Principal; namespace xx.Models.Extensions{ public static class IIdentityEx { public static string GetEmail(this IIdentity identity) { var claim = ((ClaimsIdentity)identity).FindFirst("Email"); return (claim != null) ? claim.Value : string.Empty; } } }
修改IdentityModels.cs文件中ApplicationUser类的GenerateUserIdentityAsync方法:
public class ApplicationUser : IdentityUser { public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) { // 请注意,authenticationType 必须与 CookieAuthenticationOptions.AuthenticationType 中定义的相应项匹配 var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); // 在此处添加自定义用户声明 userIdentity.AddClaim(new Claim("Email", this.Email.ToString())); return userIdentity; } }
在任意视图文件中添加@using xx.Models.Extensions后,就可以像使用@User.Identity.GetUserName()一样使用@User.Identity.GetEmail()来获取用户Email信息了。