2015-05-22 59 views
-1

我有一個奇怪的問題將浮點值,我有一個模型definied這樣的:錯誤而textboxfor MVC

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; } 
} 

更重要的是我有一個頁面在這樣的剃刀writen(我會後剛剛它的一部分):

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

好了,所以,當我將我的新事件在外地以上的價格/付款IM浮點數得到一個奇怪的錯誤是這樣的:

具有'EventType'鍵的ViewData項是類型'System.String',但必須是'IEnumerable'類型。

這是非常奇怪的,因爲它指向的下拉列表中沒有與支付字段連接。正如我所說的,當我將一個整數放入Payment域時 - 一切正常。

這是怎麼回事?

編輯

歐凱傢伙,我得到它是我沒有在POST方法reassing一個的SelectList。我已經解決了。但是:

  1. 我想明白了,當我在一個文本框放一個浮點數爲什麼只apearing

  2. 如何解決下一個問題:Value 'x.x' is not valid for Cena

+2

它與「浮點」無關。它的原因是'Model.EventTypeList'的值是'null',可能是因爲當你發佈並返回視圖時,你沒有重新分配'SelectList'(將來只需發佈重現問題所需的最小代碼)在你的模型和視圖中的其他屬性與你的問題沒有任何關係!) –

+0

@StephenMuecke okey,你是不是正在重新選擇選擇列表。我做到了,錯誤消失了。然而,解釋一下爲什麼只有當我把十進制數字?更重要的是,我仍然不能插入一個十進制數字的錯誤驗證cuz,如下所示:''3.1'對Cena無效。'我之前有這個錯誤,並且添加了''in web.config文件解決了問題,然後 – ilovkatie

+1

因爲服務器上的文化不接受一個點作爲小數點分隔符(可能是逗號)。所以當你發佈'3。1',它會添加一個'ModelState'錯誤(因爲它本應該是'3,1'),最好的猜測是如果'ModelState'無效,則返回View(model);'但忘記重新分配SelectList '。當你輸入一個整數時,'ModelState'不是無效的,所以你可能保存並重定向。 –

回答

1

的錯誤是因爲EventTypeList的值在

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

is null

發生這種情況的原因是,當您回發時,ModelState無效,並且您返回視圖時未重新指定SelectList(如您在GET方法中所做的那樣)。

原因ModelState是無效的,因爲在服務器上的文化不接受.(點)字符作爲小數點分隔符(最有可能是使用,(逗號文化)作爲小數點分隔符)。您需要更改web.config文件中的文化,例如更改爲<<globalization culture ="en-US" />