• 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信息了。

  • 相关阅读:
    202104-2 邻域均值
    202104-1 灰度直方图
    1384. 饲料调配
    1381. 阶乘
    264. 丑数 II
    1380. 邮票
    42 新安装的idea必备设置
    41 cmd中解除被占用的端口
    40 文件在线预览
    39 进度条使用
  • 原文地址:https://www.cnblogs.com/mercator/p/12356735.html
Copyright © 2020-2023  润新知