Перед отправкой этого вопроса я много искал, и для каждого прочитанного вопроса либо ситуация была неодинаковой, либо ответ не работал для меня.
Как видно из названия, у меня есть 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
Внутри моего Домашнего контроллера есть Метод получения POST :
[HttpPost]
public ActionResult Retrieve(RetrieveTestResultsViewModel viewModel)
{
// viewModel.UserId -> null
// viewModel.PhoneNumber -> null
}
Как вы видите, внутри метода Retrieve я ставлю точку останова и вижу, что ни один из моих входов не привязан к viewModel!
Любая помощь приветствуется.