我有一个奇怪的问题,我有一个模特定义如下:
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。我已经修好了。但是:我想理解为什么只有当我在文本框中放置一个浮点数时它才会出现
如何解决下一个问题:Value 'x.x' is not valid for Cena
答案 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" />