【发布时间】:2015-02-22 23:29:03
【问题描述】:
将表单提交给控制器后,如果视图从控制器返回,则 MaskedTextBoxFor 输入会丢失其值,而所有其他值(textboxdor、dropdownlistfor)在提交时仍保留。那么,当提交的视图从控制器返回时,如何使 MaskedTextBoxFor 的值保持不变?提前谢谢...
查看(更新):
@model EurodeskMultipliers.Domain.Entities.Multiplier
@using (Html.BeginForm("Create", "Multiplier", FormMethod.Post,
new { id = "createForm", enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
<div class="container">
<fieldset>
<section>
<div class="legend-left">
@Html.LabelFor(m => m.Phone)
@(Html.Kendo().MaskedTextBoxFor(m => m.Phone).Mask("(0999) 000 00 00"))
@Html.ValidationMessageFor(m => m.Phone)
<br />
@Html.LabelFor(m => m.ContactPhone)
@(Html.Kendo().MaskedTextBoxFor(m => m.ContactPhone).Mask("(0999) 000 00 00"))
<br />
@Html.LabelFor(m => m.ContactMobile)
@(Html.Kendo().MaskedTextBoxFor(m => m.ContactMobile).Mask("(0999) 000 00 00"))
@Html.ValidationMessageFor(m => m.ContactMobile)
<br />
</div>
</section>
</fieldset>
<div class="dv-right">
@(Html.Kendo().Button()
.Name("submitbtn")
.Content("Save")
)
</div>
</div>
}
控制器:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Exclude = null)] Multiplier multiplier)
{
try
{
if (ModelState.IsValid)
{
return View(); //FOR TESTING "MaskedTextBox"
db.Multipliers.Add(multiplier);
db.SaveChanges();
return RedirectToAction("Completed");
}
}
catch (RetryLimitExceededException /* dex */)
{
//Log the error (uncomment dex variable name and add a line here to write a log.)
ModelState.AddModelError("", "Unable to save changes. Try again, and if the problem persists, see your system administrator.");
}
return View(multiplier);
}
型号:
public class Multiplier
{
public int ID { get; set; }
[Required(ErrorMessage = "Required")]
[RegularExpression(@"\([0-9]{4}\) [0-9]{3} [0-9]{2} [0-9]{2}", ErrorMessage = "Check phone number.")]
[MaxLength(20)]
[Display(Name = "Phone")]
public string Phone { get; set; }
[Required(ErrorMessage = "Required")]
[RegularExpression(@"\([0-9]{4}\) [0-9]{3} [0-9]{2} [0-9]{2}", ErrorMessage = "Check phone number.")]
[MaxLength(20)]
[Display(Name = "Mobile Phone")]
public string ContactMobile { get; set; }
//Navigation property
public virtual InstituteStatus InstituteStatus { get; set; }
[ForeignKey("TermID")]
public virtual Lookup Lookup { get; set; }
//Collection navigation property
public virtual ICollection<Participant> Participants { get; set; }
//For using two Foreign Key on the same (Multiplier) table
[ForeignKey("MultiplierCityID")]
[InverseProperty("MultiplierCityMultipliers")]
public virtual City MultiplierCity { get; set; }
[ForeignKey("ContactCityID")]
[InverseProperty("ContactCityMultipliers")]
public virtual City ContactCity { get; set; }
}
【问题讨论】:
-
提交表单后,页面是否正在重新加载?
-
当然。像这样的情况:我填写输入字段并将 Razor 视图提交给控制器。然后,如果出现问题,视图将返回输入及其数据,但 MaskedTextBoxFor 除外。因此,由于此问题,用户需要再次重新键入所有电话字段。我认为有与 Dropdownlist 相关的类似问题,但我的问题仅与 MaskedTextBoxFor 有关。你能帮忙吗?
-
当我分配的值与掩码不匹配时,我看到了同样的效果,然后 Kendo 根本不显示该值。据我了解,这在您的情况下不会发生,因为您最初分配了一个值,然后发送到控制器,控制器返回相同的值以供用户查看(最后一个假设是否正确?)
-
@OnaBai:实际上我宁愿在第一次初始化期间不分配任何值。用户输入他/她的电话号码,然后将表单提交给控制器。那么,它可能会导致问题吗?
-
我的意思是,当它从服务器返回并“失去其价值”时,该值是否正确,不是吗?如果您在初始化中分配相同的值,它会显示吗?
标签: asp.net-mvc kendo-ui kendo-asp.net-mvc failed-to-load-viewstate kendo-maskedtextbox