MVC / Razor:文本框应该在回发后显示NO值

时间:2014-10-13 13:01:35

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor

在MVC Form Post场景中,我希望在将数据发布到服务器之后有一个空文本框,并且该页面再次提供给用户。现在,发布的用户名显示在回发后的文本框中。

@using (Html.BeginForm("SignIn", "Account", FormMethod.Post))
{
    @Html.TextBoxFor(m => m.UserName, new { @class = "form-control", @type = "email", required = "", pattern = "^", @placeholder = "E-mail", @title = "", @id = "UserName", data_hint = "Required"})
}

首先,包含用户名的模型被发送回表单,所以我认为这导致了它。我现在寄回一个" clean"甚至强制空用户名的模型,但也没有帮助。

return View("SignIn", "_Layout", new ViewModel
{
    UserName = ""
});

如何在回发后获得空文本框?

5 个答案:

答案 0 :(得分:5)

在设置值之前使用ModelState.Clear()。将模型发布回ActionResult并返回相同的View时,模型对象的值包含在ModelState中。

然后返回新模型,

ModelState.Clear();
return View("SignIn", "_Layout", new ViewModel());

答案 1 :(得分:0)

用作

@using (Ajax.BeginForm("SignIn", "Account", new AjaxOption{HttpMethod="post", onSuccess="success(data)"))
{
    @Html.TextBoxFor(m => m.UserName, new { @class = "form-control", @type = "email", required = "", pattern = "^", @placeholder = "E-mail", @title = "", @id = "UserName", data_hint = "Required"})
}

<script>

function success(data){
    $("#COntrolID").val("");
}

答案 2 :(得分:0)

只需在呼叫成功后重新加载页面

喜欢

 window.location.href = '@Url.Action("SignIn", "_Layout")';

这对你有用。

答案 3 :(得分:0)

你应该知道一些关于MVC的东西,也就是说,它如何处理查询字符串并调用验证以及填充Viewmodel / model ......

答案:在为该操作方法调用控制器之前的回发中,MVC尝试进行验证工作。这就是为什么你可以在完成任何其他工作之前在控制器中使用验证检查的原因!

if(!ModelState.IsValid)

但接下来发生的事情会让你感到困惑,直到你理解它为止。 MVC和浏览器只根据HTTP协议处理查询字符串。因此,为了使MVC能够生成强类型,它必须首先创建模型或视图模型的空实例,然后它将使用回发中具有相同名称的值填充新创建的对象中的任何字段!

如果在返回发布的视图时你看到了你没想到的东西,那只是意味着BeginForm逻辑告诉MVC什么属性名称会回来并告诉它值。这是使用MVC在视图中返回发布值的唯一方法。

如果您不想要该值,只需将其从帖子中排除。

答案 4 :(得分:0)

添加

autocomplete="off"

到您的文本框

@Html.TextBoxFor(m => m.UserName, new { @class = "form-control", @type = "email", required = "", pattern = "^", @placeholder = "E-mail", @title = "", @id = "UserName", data_hint = "Required", @autocomplete = "off"})