簡體   English   中英

提交表單后,ASP.net MVC ViewModel屬性為null

[英]ASP.net MVC ViewModel properties are null after submiting form

在提交此問題之前,我進行了很多搜索,對於我閱讀的每個問題,情況都不盡相同或答案對我不起作用。

如標題所示,我有一個MVC ViewModel

public class RetrieveTestResultsViewModel
{
    [DisplayName("نام کاربری")]
    [Required(ErrorMessage = "لطفا نام کاربری را وارد کنید")]
    public string UserId { get; set; }

    [DisplayName("شماره تلفن")]
    [Required(ErrorMessage = "لطفا شماره تلفن را وارد کنید")]
    [StringLength(11, ErrorMessage = "شماره تلفن باید 11 رقمی باشد", MinimumLength = 11)]
    [RegularExpression(@"^0[0-9]+$", ErrorMessage = "شماره تلفن صحیح نیست")]
    public string PhoneNumber { get; set; }


}

我確保所有屬性都是公共的並且是原始類型(字符串)。

然后在CSHTML表單中

@using (Html.BeginForm("Retrieve", "Home", FormMethod.Post, new { role = "form", autocomplete = "off", id = "newsletterForm", enctype = "multipart/form-data" }))
            {

                <div class="row">

                    @*username*@
                    <div class="col-sm-5">
                        <div class="form-control-custom">
                            @Html.NoAutoCompleteTextBoxFor(model => model.UserId, "input-lg font-size-sm mr-md formal", "نام کاربری *")
                            @Html.ValidationMessageFor(model => model.UserId, "", new { @class = "text-danger" })
                        </div>
                    </div>


                    @*phone number*@
                    <div class="col-sm-4">
                        <div class="form-control-custom">
                            @Html.NoAutoCompleteTextBoxFor(model => model.PhoneNumber, "input-lg font-size-sm mr-md formal", "شماره تلفن *")
                        </div>
                    </div>


                    <div class="col-sm-3">
                        <button type="button" autocomplete="off"
                                onclick="AjaxForm.CustomSubmit(this, 'newsletterForm')"
                                data-loading-text="در حال ارسال اطلاعات"
                                class="btn btn-primary btn-lg btn-block font-size-sm text-uppercase mt-sm formal">
                            دریافت نتایج
                        </button>
                    </div>
                </div>
            }

請注意,自定義的NoAutoCompleteTextBoxFor方法在其他項目中經過了充分的測試,如下所示:

public static MvcHtmlString NoAutoCompleteTextBoxFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression)
    {
        return html.TextBoxFor(expression, new { @class = "form-control", autocomplete = "off" });
    }

同樣在我的CSHTML頂部,我聲明了模型:

@model VH.ViewModel.TestResults.RetrieveTestResultsViewModel

在我的Home控制器中 ,有Retrieve POST方法

    [HttpPost]
    public ActionResult Retrieve(RetrieveTestResultsViewModel viewModel)
    {
        // viewModel.UserId -> null
        // viewModel.PhoneNumber -> null 
    }

如您所見,在Retrieve方法內部,我放置了一個斷點,並且看到沒有任何輸入綁定到viewModel!

任何幫助,將不勝感激。

您將multipart / form-data用作表單enctype 當您要將一些文件上傳到操作中時,可以使用它。 但是您應該使用[FormData]屬性來修飾您的action參數。 這將告訴MVC ,您的模型應該由表單輸入組成。
您可以刪除enctype屬性或使用FormData屬性。

public ActionResult Retrieve(
     [FormData] RetrieveTestResultsViewModel viewModel)
{

}

編碼愉快!

我不敢相信

我將表單ID更改為其他內容,並且有效!

如果有人能猜出是什么問題,請回答。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM