加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – 绑定到视图模型的MVC3 Razor – TextBoxFor()

发布时间:2020-12-16 09:59:59 所属栏目:asp.Net 来源:网络整理
导读:我的视图在html表中显示一系列行.行按数据库中的排序顺序排序. html表中的一列是一个允许用户修改此排名顺序的文本框.表格底部有一个更新提交按钮,允许用户保存此新订单.我遇到的问题是排名顺序正确更新到数据库,但是当控制器返回到视图时,所有数据都在屏幕
我的视图在html表中显示一系列行.行按数据库中的排序顺序排序. html表中的一列是一个允许用户修改此排名顺序的文本框.表格底部有一个更新提交按钮,允许用户保存此新订单.我遇到的问题是排名顺序正确更新到数据库,但是当控制器返回到视图时,所有数据都在屏幕上正确更新,但文本框中的值不会更新.

Order   |  Data     
================================================
10      |  Item 1
20      |  Item 2
30      |  Item 3

Lets say the user makes the following changes
Order   |  Data
================================================
50      |  Item 1
20      |  Item 2
10      |  Item 3

Now User hits update and what is rendered is:

Order   |  Data
================================================
50      |  Item 3
20      |  Item 2
10      |  Item 1

(Note data was sorted correctly but values of TextBoxFor did not update)

我的观点代码

@using (Html.BeginForm("UpdateRanks","MyController")) {
    <table cellpadding="0" cellspacing="0" width="100%">
    @for (int i = 0; i < Model.DbSelections.Count; i++) {
       var item = Model.DbSelections[i];
       <tr>
        <td>
            @Html.TextBoxFor(m => m.DbSelections[i].Rank,new { @class = "NarrowTextBox" })
        </td>
        <td>
            @Model.DbSelections[i].Rank (works!),@item.ItemName<br />
        </td>
       </tr>
    }
    <input type="submit" value="Update" name="updateaction"  class="StandardButton"/>
</table>
}

控制器代码:

[HttpPost]
[MultiButton(MatchFormKey = "updateaction",MatchFormValue = "Update")]
public ActionResult UpdateRanks(MyViewModel model) {

    if (ModelState.IsValid) {

        MyRepository myRepo = new MyRepository();
        <!-- saves updated ranks to database - it works -->
        myRepo.UpdateAutoPicks(...);

        <!-- after saved ranks above,now reload data including ranks from database -->
        <!-- debugging shows that data and ranks and ordering is correct->
        model.DbSelections = myRepo.GetItems();

        return View("Index",model);


    } else {
        <!-- blah -->
    }

    return View("Index",model);
}

解决方法

看看这个其他 Post是否可以帮到你.

使用此解决方案的一个警告是,您将丢失使用TextBoxFor()的任何内置功能,例如验证.如果这不起作用,您可以尝试使用ModelState.Clear()来清除已发布的值(有关详细信息,请参阅here).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读