繁体   English   中英

不支持返回类型'System.String'。 参数名称:表达式MVC枚举

[英]Return type 'System.String' is not supported. Parameter name: expression MVC Enum

我正在尝试从Asp.net MVC中的Enum创建下拉列表。 使用下面发布的代码,我遇到了以上错误。

这是代码:

<div class="col-md-10">
            @Html.EnumDropDownListFor(model => model.SenderType, null, htmlAttributes: new { @class = "form-control" })
            @Html.ValidationMessageFor(model => model.SenderType, "", new { @class = "text-danger" })
        </div>

我的控制器:

public ActionResult Create([Bind(Include = "SenderId,SenderName,SenderType,SenderPurpose,UserId")] SenderModel senderModel)
    {
        try
        {

            if (ModelState.IsValid)
            {
                var currentUserId = User.Identity.GetUserId();
                senderModel.UserId = int.Parse(currentUserId);

                db.Sender.Add(senderModel);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
        }
        catch (DataException /* dex */)
        {
            //Log the error (uncomment dex variable name and add a line here to write a log.
            ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists see your system administrator.");
        }
        return View(senderModel);
    }

模型:

public enum SenderType
{
    Transactional,
    Promotional
}
public class SenderModel
{
    [Key]
    public int SenderId { get; set; }

    [Display(Name = "Sender Name")]
    public string SenderName { get; set; }
    [Display(Name = "Sender Type")]
    public string SenderType { get; set; }
    [Display(Name = "Sender Purpose")]
    public string SenderPurpose { get; set;}

    public int UserId { get; set; }
    public virtual ApplicationUser User { get; set; }
}

我已经发布了我的代码。 帮助将不胜感激

由于在剃刀中使用的模型中具有SenderType属性作为字符串类型,因此EnumDropDownListFor不支持。 EnumDropDownListFor期望枚举类型属性,因此您的SenderType属性应为SenderType枚举类型。 因此,您的模型应为:

public class SenderModel
{
    [Key]
    public int SenderId { get; set; }

    [Display(Name = "Sender Name")]
    public string SenderName { get; set; }

    [Display(Name = "Sender Type")]
    public SenderType SenderType { get; set; } // SenderType should be of type enum SenderType
    [Display(Name = "Sender Purpose")]
    public string SenderPurpose { get; set;}

    public int UserId { get; set; }
    public virtual ApplicationUser User { get; set; }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM