1

我有一个代表描述字段的文本区域。描述有逗号,因此在尝试拆分字段的描述时,无法正确解析数据。如何正确获取每一行的描述。

     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>

如您所见,此站点表是租户对象的子对象。此子记录不会使用此方法自动更新,但租户数据会自动更新。这就是我尝试使用 FormColelction 的原因。有什么我缺少的东西来完成这项工作吗?

4

3 回答 3

1

试试这个有用的功能

ValueProviderResult Match=FormCollection.GetValue("ValueProvider");
于 2011-10-21T03:38:25.190 回答
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;
    }
}

编辑
我仍然对您的 ViewModel 有很多假设,但也许可以试试这个:

<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>
于 2011-08-19T21:31:50.000 回答
0

你也可以试试

   string Match=FormCollection.GetValue("ValueProvider").AttemptedValue;
于 2015-09-22T11:54:57.103 回答