这是一个有效的模型吗?

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,你应该好好去。我排除了动态添加迷你表单字段的部分,因为听起来你已经有了解决方案。

以上是关于这是一个有效的模型吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止在背面片段导航上再次设置视图模型

关于片段生命周期

我可以在 android studio 的片段上使用 Firebase 吗?

可以在刀片视图中使用 eloquent 模型吗?

这是从片段中获取字符串资源的正确方法吗?

需要一种有效的方法来避免使用 Laravel 5 重复代码片段