这是一个有效的模型吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了这是一个有效的模型吗?相关的知识,希望对你有一定的参考价值。
模型是否正确?
public class NewForm
{
public string[] Field { get; set; }
public bool[] Check { get; set; }
}
对于这样的视图:
@html.TextAreaFor(model => model.Field)
@Html.TextAreaFor(model => model.Field)
@Html.TextAreaFor(model => model.Field)
@Html.CheckBoxFor(model => model.Check)
@Html.CheckBoxFor(model => model.Check)
或者是否有更好的方法来创建同名字段?在Controller中仅显示第一个值。但我需要所有人
[HttpPost]
public ActionResult Edit(NewForm model)
{
Response.Write(model.Field);
Response.Write(model.Check);
}
字段可能是一个不确定的数字,因为通过单击按钮javascript会添加一个具有相同名称的同名新字段
答案
为什么要对字段使用相同的名称,每个字段都有正确的名称
public class NewForm
{
public string FirstField { get; set; }
public string Field { get; set; }
public bool Check { get; set; }
}
视图
@Html.TextAreaFor(model => model.FirstField)
@Html.TextAreaFor(model => model.Field)
@Html.CheckBoxFor(model => model.Check)
的
[HttpPost]
public ActionResult Edit(NewForm model)
{
Response.Write(model.FirstField);
Response.Write(model.Field);
Response.Write(model.Check);
}
另一答案
听起来你想要将model
的多个实例提交回控制器。
你可以这样做。我的例子将向你的控制器提交10个Field
实例。
视图:
@using (Html.BeginForm())
{
<div>
@for(int i = 0; i<10; i++)
{
<div>@Html.TextBox("items[" + i + "].Field", "", new { id = "items[" + i + "].Field", placeholder = "Enter Text..." })</div>
@Html.Hidden("items.Index", i)
}
</div>
<input type="submit" value="Submit" />
}
类:
public class MyClass
{
public string Field {get;set;}
}
控制器方法:
[HttpPost]
public ActionResult ActionName(List<MyClass> items)
{
//...do stuff
}
显然,您也可以将复选框添加到模型和表单中,以便提交其中的许多内容。
另一答案
不,不是。在您定义的模型中,您创建了两个不同的数组:第一个属性Field
是一个字符串数组,第二个属性Check
是一个bool数组。将[]
放在一个类型后表示一个数组。
如果你有一个未知数量的我称之为“迷你形式”的数量,并且这些数量由用户通过UI决定,那么你应该创建一个视图模型来表示这个迷你形式,以及一个容器视图模型来容纳它以及您的视图所需的任何其他属性。
例如:
public class MiniFormViewModel
{
public string MyInput { get; set; }
public bool MyCheck { get; set; }
}
然后在容器视图模型中:
public class ContainerViewModel
{
public IEnumerable<MiniFormViewModel> MiniForms { get; set; }
//Any other properties you need on the view that will occur a single time
}
现在,在JS中,您需要添加一些操作才能执行此操作:
function getViewModel() {
//You'll have to decide how you want to get the values of the mini form's fields. Perhaps you might even have a function to supply these values. Up to you.
return {
MiniForms: [{
MyInput: '', //value from the first "mini form' string field
Mycheck: false //value from the first "mini-form" bool field
},
{
MyInput: '', //value from the second"mini form' string field
Mycheck: false //value from the second"mini-form" bool field
}
]
}
}
然后你需要将它发回服务器。我将通过内置的JS Fetch函数演示如何执行此操作:
fetch(yourUrlForTheControllerAction,
{
method: 'post',
body: JSON.stringify(getViewModel()),
headers: {
'content-type': 'application/json; charset=UTF-8'
}
})
blammo,你应该好好去。我排除了动态添加迷你表单字段的部分,因为听起来你已经有了解决方案。
以上是关于这是一个有效的模型吗?的主要内容,如果未能解决你的问题,请参考以下文章