在文本框中为MVC插入浮点值时出错

时间:2015-05-22 09:51:04

标签: asp.net-mvc razor

我有一个奇怪的问题,我有一个模特定义如下:

public class AddEventModel
{
    [Required]
    [DataType(DataType.Text)]
    [Display(Name = "Nazwa wydarzenia")]
    public string EventName { get; set; }

    [Required]
    [DataType(DataType.Text)]
    [Display(Name = "Rodzaj")]
    public string EventType { get; set; }

    [Required]
    [DataType(DataType.DateTime)]
    [Display(Name = "Data")]
    public System.DateTime EventDate { get; set; }

    [Required]
    [DataType(DataType.Text)]
    [Display(Name = "Widocznosc")]
    public string IsPublic { get; set; }

    [DataType(DataType.Text)]
    [Display(Name = "Minimalny wiek")]
    public int MinimalAge { get; set; }


    [Display(Name = "Cena")]
    [DataType(DataType.Text)]
    public decimal Payment { get; set; }

    [Required]
    [DataType(DataType.Text)]
    [Display(Name = "Opis")]
    public string Description { get; set; }

    [Required]
    [DataType(DataType.Text)]
    [Display(Name = "Miasto")]
    public string City { get; set; }


    public SelectList EventTypeList { get; set; }
}

更多的是我在这样的剃须刀中写了一个页面(我将发布其中的一部分):

        <div class="form-group">
            @Html.LabelFor(m => m.EventName, new { @class = "col-md-2 control-label" })
            <div class="col-md-10">
                @Html.TextBoxFor(m => m.EventName, new { @class = "form-control" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(m => m.EventType, new { @class = "col-md-2 control-label" })
            <div class="col-md-10">
                @Html.DropDownListFor(m => m.EventType, Model.EventTypeList, new { @class = "form-control" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(m => m.EventDate, new { @class = "col-md-2 control-label" })
            <div class="col-md-10">
                @Html.TextBoxFor(m => m.EventDate, new { @class = "form-control", id = "datepicker" })
            </div>
            <script type="text/javascript">
                $(function () {
                    $('#datepicker').datetimepicker({
                        minDate: moment()
                    });
                });
            </script>
        </div>
        <div class="form-group">
            @Html.LabelFor(m => m.IsPublic, new { @class = "col-md-2 control-label" })
            <div class="col-md-10">
                <table>
                    <tr>
                        <td><label>@Html.RadioButtonFor(m => m.IsPublic, "Prywatne") Prywatne</label></td>
                    </tr>
                    <tr>
                        <td><label>@Html.RadioButtonFor(m => m.IsPublic, "Publiczne") Publiczne</label></td>
                    </tr>
                </table>
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(m => m.MinimalAge, new { @class = "col-md-2 control-label" })
            <div class="col-md-10">
                @Html.TextBoxFor(m => m.MinimalAge, new { @class = "form-control" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(m => m.Payment, new { @class = "col-md-2 control-label" })
            <div class="col-md-10">
                @Html.TextBoxFor(m => m.Payment, new { @class = "form-control" })
            </div>
        </div>
        <div class="form-group">
            @Html.LabelFor(m => m.Description, new { @class = "col-md-2 control-label" })
            <div class="col-md-10">
                @Html.TextAreaFor(m => m.Description, new { @class = "form-control" })
            </div>
        </div>
    </div>

好的,所以,当我在字段Cena / Payment中插入带浮点数的新事件时,会出现如下奇怪的错误:

  

具有键&#39; EventType&#39;的ViewData项。属于&#39; System.String&#39;但必须属于&#39; IEnumerable&#39;。

这很奇怪,因为它指向与付款字段无关的下拉列表。正如我所说,当我将一个整数放入付款字段时 - 一切正常。

怎么回事?

修改

好吧,我知道我没有在post方法中重新选择SelectList。我已经修好了。但是:

  1. 我想理解为什么只有当我在文本框中放置一个浮点数时它才会出现

  2. 如何解决下一个问题:Value 'x.x' is not valid for Cena

1 个答案:

答案 0 :(得分:1)

错误是throw,因为

EventTypeList的值
@Html.DropDownListFor(m => m.EventType, Model.EventTypeList, new { @class = "form-control" }

null

这种情况正在发生,因为当您回发时,ModelState无效,您返回视图时无需重新分配SelectList(就像您在GET方法中所做的那样)。

ModelState无效的原因是因为服务器上的文化不接受.(点)字符作为小数分隔符(很可能是使用,的文化(逗号)作为小数分隔符)。您需要更改web.config文件中的区域性,例如更改为<<globalization culture ="en-US" />