2011-08-19 99 views
1

我有一個代表描述字段的textarea。描述中有逗號,所以當試圖拆分字段的描述時,數據沒有被正確解析。我怎樣才能正確地得到每一行的描述。ASP.NET MVC FormCollection TextArea

 var DescList = FormValues["Item.Description"].Split(',').Select(item => item).ToList<string>(); 
//will not work for obvious reasons. Comma delimited FormCollection has commas to identify separate row data. 

看起來像微軟設計的FormsCollection沒有考慮textarea控件。嘗試訪問每個值時,包含逗號的文本區域將不起作用。有趣的是,_entriestables財產擁有完美的格式,但他們選擇將其作爲私有財產。非常令人沮喪。

`

Here is the important part of my viewmodel. 
public class TenantViewModel 
{ 
    public Tenant Tenant { get; set; } 
       public Site Site { get; set; } 

    } 

我的看法是填充像這樣:

if (Model != null && Model.Tenant != null && Model.Tenant.Site != null && Model.Tenant.Site.Count() > 0) 
    {<div class="detailsbox_view"> 
     <table id="tblTenantSites"> 
      <tr> 
       <th>@Html.LabelFor(item => item.Site.Title)</th> 
       <th>@Html.LabelFor(item => item.Site.Description)</th> 

      </tr> 
     @foreach (var Item in Model.Tenant.Sites) 
      { 
      <tr> 
       @Html.HiddenFor(modelItem => Item.SiteId) 


       <td> 
        @Html.EditorFor(modelItem => Item.Title) 
             </td> 
       <td> 
        @Html.TextAreaFor(modelItem => Item.Description, new {@width="400" }) 

       </td> 

      </tr> } 
     </table> 

正如你看到這個網站表是租戶對象的孩子。此子記錄不會使用此方法自動更新,但Tenant數據會自動更新。這就是我嘗試使用FormColelction的原因。 有什麼我失蹤,使這項工作?

+0

你可以發佈你的模型和輸入的例子嗎? –

+0

沒有理由使用FormValues ['whatever']。您應該將模型提交給控制器 –

+0

您可以發佈您的視圖的樣子嗎? –

回答

0

當您有多個字段具有相同的name屬性時,它們將作爲數組返回到您的FormCollection。所以,在發佈這樣的觀點:

<form action="/Home/MyAction"> 
    <textarea id="row_one_description" name="description"> 
     First row's description 
    </textarea> 
    <textarea id="row_two_description" name="description"> 
     Second row's description 
    </textarea> 

    <input type="submit" value="Submit" /> 
</form> 

你可以做這樣的事情在你的行動

[HttpPost] 
public ActionResult MyAction(FormCollection collection) 
{ 
    var descriptionArray = collection["description"]; 

    string firstRowDescription = descriptionArray[0]; 
    string secondRowDescription = descriptionArray[1]; 
} 

我必須指出,這是不是在處理數據發佈的推薦方式。您應該使用視圖模型中的數據構建視圖,並使用強類型html助手來呈現控件。這樣,當你發佈時,你的動作可以將ViewModel作爲參數。它的屬性會自動綁定,你將有一個很好的對象來玩。

[HttpPost] 
public ActionResult MyAction(MyViewModel viewModel) 
{ 
    foreach (var row in viewModel.Rows) 
    { 
     string description = row.Description; 
    } 
} 

編輯
我還假設了很多關於您的視圖模型,但也許試試這個:

<table id="tblTenantSites"> 
    <tr> 
     <th>@Html.LabelFor(model => model.Site.Title)</th> 
     <th>@Html.LabelFor(model => model.Site.Description)</th> 
    </tr> 

    @for (var i = i < Model.Tenants.Sites.Count(); i++) { 
    <tr> 
     @Html.HiddenFor(model => model.Tenants.Sites[i].SiteId) 

     <td> 
      @Html.EditorFor(model => model.Tenants.Sites[i].Title) 
     </td> 
     <td> 
      @Html.TextAreaFor(model => model.Tenants.Sites[i].Description, new { @width="400" }) 
     </td> 

    </tr> 
    } 

</table> 
+0

我該怎麼做。它已經有描述逗號分隔時,我做以下:foreach(var鍵在FormValues.Keys) { if(key.ToString()==「Item.Description」) { var value = FormValues [key。的ToString()]; } } – Keith

+0

哦,我明白了,我以爲你的意思是用戶需要輸入逗號分隔的數據到textarea。由於您未包含您的視圖的代碼,因此這個問題變得非常困難。更新我的答案,可能有助於...? – ajbeaven

+0

有關更多詳細信息,請參閱更新後的問題。謝謝 – Keith

1

嘗試用這個實用的功能

ValueProviderResult Match=FormCollection.GetValue("ValueProvider"); 
0

您也可以嘗試,

string Match=FormCollection.GetValue("ValueProvider").AttemptedValue; 
相關問題