我想向数据库添加新的多记录, 我设计View有多种形式来提交数据并插入它。
我的观点有:
- 项目1
@Html.EditorFor(modelitem => item.Description)
...
。
。
。
- 项目2
@Html.EditorFor(modelitem => item.Description)
...
我用
[HttpPost]
public ActionResult Edit(FormCollection c)
{
var desc = c.GetValue("item.Description");
}
我用它确实得到了价值,但我想分开desc的价值。
我使用.Split(',');
但是如果desc有值:
“测试值,测试desc”
所以我不能用它。
所以任何人都告诉我。如何循环项目以插入它
答案 0 :(得分:1)
您可以在字段的id前缀,以便您可以检索两个单独的字段;
@Html.TextBoxFor(x => x.SomeProperty, new { @id = "item_1_description" });
这将允许您从FormCollection中获取该特定值;
string description = c.GetValue("item_1_description");
但是,如果你能利用strongly-typing your views,那就更清洁了。在你的位置,我会创建一个代表你的两个对象的ViewModel
。由于我不知道您的数据类型是什么,我将使用Person的示例,看起来像这样;
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
}
要在一个表单中添加两个人,您将创建一个“ViewModel”来表示表单的外观 - 两个人的扁平版本;
public class MuliplePeopleViewModel
{
public string Person1Name { get; set; }
public string Person2Name { get; set; }
}
哪个会生成带有两个文本框的视图;
@model MuliplePeopleViewModel
@Html.EditorFor(x => x.Person1Name);
@Html.EditorFor(x => x.Person2Name);
现在,在您的Controller
中,您可以将FormCollection
的使用替换为新的ViewModel
,这会自动将TextBox的值绑定到相关属性;
[HttpPost]
public ActionResult Edit(MuliplePeopleViewModel viewModel)
{
string person1Name = viewModel.Person1Name;
}
深思熟虑:我不完全确定DefaultModelBinder
会绑定ViewModel
的不平整版本,例如;
public class MuliplePeopleViewModel
{
public Person Person1 { get; set; }
public Person Person2 { get; set; }
}
但也许你可以尝试一下!
修改强>
根据作者的评论,您还可以创建包含ViewModel
的<{1}};
ICollection<Person>
在您的视图中,您可以遍历每个的集合和显示字段;
public class MuliplePeopleViewModel
{
public ICollection<Person> People { get; set; }
}
现在,@model MuliplePeopleViewModel
@foreach (Person person in Model.People)
{
@Html.EditorFor(x => person.Name);
}
现在应该为您提供在您的操作中使用的人员列表。但是,如果没有,您可能需要写一个custom model binder。
更多值得深思:您可以utilise EditorTemplates来简化您的观点。
如果我能进一步提供帮助,请告诉我。
马特
答案 1 :(得分:1)
您也可以使用 -
Request.Form["Your property Name"]
工作代码:
模型 -
public class MyClass
{
public string MyName { get; set; }
}
查看 -
@using (Html.BeginForm("SubmitData","Post", FormMethod.Post))
{
<div class="form-horizontal">
<h4>MyClass</h4>
<hr />
@Html.ValidationSummary(true)
<div class="form-group">
@Html.LabelFor(model => model.MyName, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.MyName)
@Html.ValidationMessageFor(model => model.MyName)
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-default" />
</div>
</div>
</div>
}
在POST上,您可以像这样访问它 -
[HttpPost]
public ActionResult SubmitData(MyClass c)
{
var name = Request.Form["MyName"];
return View();
}
我们将在name变量中输入值。检查下图。
同样在上面的代码中我也展示了如何进行模型绑定。如果使用变量'c',那么它也将具有来自UI的值。检查下图。
答案 2 :(得分:0)
试试这个:
[HttpPost]
public ActionResult Edit(FormCollection c, string[] description)
{
}
因此,您将获得数组中的值。