[英]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.