带有负载和表单模型的MVC视图

c#

我有一个像表单一样工作的视图,因此它加载一堆下拉列表并从ActionResult Index. 将所有数据输入表单后,我将使用Html.BeginForm("Create"调用 save 方法。的ActionResult Create(RequestForm model)。所以问题是我想使用两种模型,一种用于加载,一种用于保存数据。我现在正在做的是从 FormViewModel 和 RequestForm 模型中获取对象。

有一个更好的方法吗?

看法:

@model  FormViewModel
@using (Html.BeginForm("Create", "RequestForm", FormMethod.Post))
{
    @Html.ValidationSummary(true);
     <div>
     <h4>* Country</h4>
     @Html.TextBoxFor(x => x.CountryId, new { id = "ddlCountry", @class = "form-control" })
     @Html.ValidationMessageFor(model => model.CountryId)
     </div>
}

窗体视图模型

[Required]
public int? CountryId { get; set; }

public List<CountryModel> ListOfCountries { get; set; }

申请表模型

public class RequestForm
{
    [Required]
    public int? CountryId { get; set; }
}
    

控制器

public ActionResult Create(RequestForm model)
{
    var FormInfo = FormCreate(model);
    return View("");
}

回答

您可以嵌套视图模型,并仅在表单发布时提交您想要的模型。

例如:

public class FormViewModel
{
    public IEnumerable<CountryViewModel> AvailableCountries { get; set; }
    public CreateRequestViewModel Data { get; set; }
}

public class CountryViewModel
{
    public int CountryId { get; set; }
    public string CountryName { get; set; }
}

public class CreateRequestViewModel
{
    [Required]
    public int SelectedCountryId { get; set; }
}

我只是编了个名字,但希望你能明白。

然后在视图上,您​​可以按如下方式进行设置:

@model FormViewModel
@using (Html.BeginForm("Create", "RequestForm", FormMethod.Post))
{
    @Html.ValidationSummary(true);
    
    <div>
        <h4>* Country</h4>
        @Html.DropDownListFor(
            x => x.Data.SelectedCountryId,
            new SelectList(Model.AvailableCountries, "CountryId", "CountryName"),
            new { id = "ddlCountry", @class = "form-control" }
        )
        @Html.ValidationMessageFor(x => x.Data.SelectedCountryId)
    </div>
}

再次,我手工编写,因此可能存在编译错误。但想法是您使用DropDownListFor(),而不是TextBoxFor(),生成一个下拉AvailableCountries列表,其中包含您填充的列表生成的选项。

而且您只需要放置[Required]您要将数据发布到的视图模型,因为它正在验证用户的数据。你不需要把它放在 ,CountryViewModel因为你自己填充列表。

最后,还有一件更重要的事情你需要注意,那就是表单发送到的方法上的参数名称:

@model FormViewModel
@using (Html.BeginForm("Create", "RequestForm", FormMethod.Post))
{
    @Html.ValidationSummary(true);
    
    <div class="k-content">
        <h4>* Country</h4>
        @Html.DropDownListFor(
            x => x.Data.SelectedCountryId,
            new SelectList(Model.AvailableCountries, "CountryId", "CountryName"),
            new { id = "ddlCountry", @class = "form-control" }
        )
        @Html.ValidationMessageFor(x => x.Data.SelectedCountryId)
    </div>
}

参数的名称必须您在外部模型中声明的名称相匹配FormViewModel


以上是带有负载和表单模型的MVC视图的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>