MVC 4.5数据绑定HTML到字典,发布到对象

本文关键字:对象 字典 MVC 数据绑定 HTML | 更新日期: 2023-09-27 18:13:42

c#和mvc新,所以我很困惑,为什么在这两个例子中,只有一个工作。我只是通过添加断点和检查对象来检查这一点。

视图(两个示例相同)

<form action="@Url.Action("Post", "Delivery")" method="post">
        <table class="table" id="table">
            <tbody>
                @if (Model != null)
                {
                    foreach (var line in Model.TransactionLines)
                    {
                        <tr>
                            <td>@line.StockCode</td>
                            <td>@line.Location</td>
                            <td>@line.Qty</td>
                            <td>
                                <input type="text" size="5" maxlength="5" name="@("MoveOut[" + line.TranID + "]")" value="" />
                            </td>
                        </tr>
                    }
                }
            </tbody>
        </table>
        <input type="submit" value="Post" class="btn btn-primary" />
</form>
工作:

控制器

public ActionResult Post(Dictionary<string, string> MoveOut)
{
    return RedirectToAction("Saved");
}

不工作:

控制器

public ActionResult Post(DeliveryModel Delivery)
{
    return RedirectToAction("Saved");
}

public class DeliveryModel : ReceiptModel
{
    //Also tried below
    //public Dictionary<string, string> MoveOut;
    public Dictionary<string, string> MoveOut = new Dictionary<string,string>();

MVC 4.5数据绑定HTML到字典,发布到对象

您的DeliveryModel只有MoveOut的字段,而不是具有getter和setter的属性,因此DefaultModelBinder不能设置值。改为

public class DeliveryModel : ReceiptModel
{
    public Dictionary<string, string> MoveOut { get; set; }
}