表单提交后重置textarea的值我想通过/MyController/Message/3向userID=3发送消息这将执行Message()[get]操作,我在文本区域中输入一些文本,然后单击“保存”以发布表单Message()[post]操作保存更改,将SomeText的值重置为空字符串并返回到视图。此时我希望textarea为空,因为我已经将ViewData["SomeText"]设置为string.Empty为什么post操作后textarea值没有更新为空字符串?这是操作:[AcceptVerbs(HttpVerbs.Get)]publicActionResultMessage(intID){ViewData["ID"]=ID;返回视图();}[AcceptVerbs(HttpVerbs.Post)]publicActionResultMessage(intID,stringSomeText){//将文本保存到数据库SaveToDB(ID,SomeText);//设置SomeText的值为空,返回视图ViewData["SomeText"]=string.Empty;返回视图();}和相应的视图:SomeText:问题是HtmlHelper正在检索ModelState值,该值填充了发布的数据。与其通过重置ModelState来解决这个问题,不如重定向回[get]操作。[post]动作还可以像这样设置一个临时状态消息:[AcceptVerbs(HttpVerbs.Post)]publicActionResultMessage(intID,stringSomeText){//将文本保存到数据库SaveToDB(ID,SomeText);TempData["消息"]="消息已发送";返回RedirectToAction("消息");这对我来说似乎是更正确的行为。问题是您的ModelState重新填充了发布的值。你可以做的是在Action上用Post属性清除它:ModelState.Clear();从ModelState读取值的html助手。并且没有优雅的方法来覆盖此行为。但是,如果您在SaveToDB(ID,SomeText)之后添加此行,它应该可以工作:ModelState["SomeText"].Value=newValueProviderResult("","",CultureInfo.CurrentCulture);我尝试了一切,但只有当它只在我做了这样的事情时才起作用:ModelState.Clear();//这将清除提交的地址viewModel.Address=newAddress();viewModel.Message="Dadossalvoscomsucesso!";returnView("地址",ReturnViewModel(viewModel));希望这可以帮助。您可以根据需要执行ModelState.Remove("SomeText"),而不是使用清除整个模型状态的ModelState.Clear()。或者在没有htmlhelper-extensions的情况下呈现输入。它们旨在从ModelState而不是Model(或视图数据)获取Value。这是客户端行为。我推荐使用javascript。如果你使用JQuery,你可以这样做:我不再使用Javascript,但我相信常规的JS就像:document.getElementById("SomeText").value="";(您可以在其中一个加载事件上执行此操作。希望这会有所帮助。我相当确定文本区域正在从引擎盖下的Request.Form获取值,因为ViewData["SomeText"]为空。是否有可能模型状态更新时出现错误?我相信如果模型状态无效,它将尝试从模型状态而不是视图数据或模型中提取值。编辑:我已经包含了相关部分下面的TextAreaHtmlHelper扩展中的源代码。在我看来,它完全符合我的预期——如果出现模型错误,它将从模型状态中提取值,否则它将使用ViewData中的值。注意在Post方法中,“SomeText”键在您设置之前不应该存在,即,它不会从响应GETForward的代码版本中检索。由于您显式地为ViewData提供了一个值,请使用ViewData应该为false,useViewData应该为false,除非在模型状态中设置了错误。//如果命名字段有任何错误,我们添加css属性。模型状态模型状态;如果(htmlHelper.ViewData.ModelState.TryGetValue(name,outmodelState)){如果(modelState.Errors.Count>0){tagBuilder.AddCssClass(HtmlHelper.ValidationInputCssClassName);}}//当渲染TextArea时,第一个换行符总是被修剪,所以我们添加一个额外的换行符//以防渲染的值类似于“rnHello”。//尝试的值优先于显式提供的值参数。stringattemptedValue=(string)htmlHelper.GetModelStateValue(name,typeof(string));tagBuilder.SetInnerText(Environment.NewLine+(attemptedValue??((useViewData)?htmlHelper.EvalString(name):value)));返回tagBuilder.ToString(TagRenderMode.Normal);做某事像这样:加:ModelState.Clear();在提示操作方法的返回语句之前。适合我。它可能适合你。以上就是C#学习教程:表单提交后重置textarea的值。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处:
