簡體   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