很抱歉我的术语很差
但是我会尝试更好地解释自己:
给出一个包含obj和obj列表的模型
我希望视图中的表单将obj(和列表)发送给控制器
控制器,将obj添加到更新后的列表中并将其发送回视图。
我的问题是在提交时将“初始”列表传递给表单;
这不起作用:
<div class="form-group">
@Html.HiddenFor(m => m.RequestList, Model.RequestList)
</div>
编辑:回答...
这个问题可能已经在这里得到答案:
型号 Model Binding to a List MVC 4 3个答案
不,不是, 我不是要编辑列表,而不仅仅是“声明”, 无论如何,正如我建议的那样,我试图循环列表中的元素并将其“添加到新元素中”;
一些东西实际上传递给了模型,但是为空!
for (int i = 0; i < Model.RequestList.Count(); ++i)
{
@Html.HiddenFor(m => m.RequestList[i], new {
StartTime = Model.RequestList[i].StartTime,
EndTime = Model.RequestList[i].EndTime,
StatusId = Model.RequestList[i].StatusId,
})
}
再次:我在做什么错了?
但是尝试这样的事情
@using (Html.BeginForm("CreateComplex", null, FormMethod.Post, new { @class = "", RequestList = Model.RequestList}))
仍然不起作用
答案 0 :(得分:0)
如果您不想编辑列表,而只是向其中添加一个新项目,则可以尝试以下流程:
<form>
以及一个将单个项目添加到列表所需的所有输入来呈现(部分)视图。可以从主页上调用此操作(例如,使用Html.RenderAction
),然后在主页或对话框中进行渲染。通过将“创建”用例与“显示列表”用例分开,可以提高可重用性和可维护性。使用此流程,无需发布所有已经存在的列表项,如果需要显示它们,则始终可以从后端/数据库中加载它们。这样做的好处是,您还将看到其他用户或进程同时添加的所有项目。这也应该照顾到所有需要的排序(新项目自然会显示在正确的位置)。
答案 1 :(得分:0)
如果您不想走数据库路线,可以使用ViewBag
存储列表,然后使用Json
中的System.Web.Helpers
处理转换示例
您需要的视图
@{
var RequestList = (List<string>)ViewBag.RequestList;
}
//you are using a null controller here --gotten from question
@using (Html.BeginForm("CreateComplex", null, FormMethod.Post, new { @class = "" }))
{
<input type="hidden" name="RequestList" id="myHiddenInput" value="@Json.Encode(RequestList)" />
//other inputs that are binded to the model
}
控制器
[HttpPost]
public ActionResult CreateComplex(Model model, string RequestList)
{
var thelist = System.Web.Helpers.Json.Decode<List<string>>(RequestList);
thelist.Add(model.TheAttrForAddition);
//model.TheAttrForAddition is the attribute in the model the user is editing
ViewBag.RequestList= thelist;
//do other things and return the view
}