asp.net MVC:清除模型状态

时间:2014-05-29 14:30:04

标签: asp.net-mvc-4 razor

我正在考虑重构一个剃刀视图,该视图当前没有使用模型将值传递给相应的控制器。此视图还包含一个JS方法,用于清除表单上的控件。

  $('#btnClear').bind("click", ClearTheForm);

...

$('#txtContact).val('');    
 $('[name="radCommType"]').attr('checked', false);

鉴于我现在正在绑定我的输入控件:

   @Html.LabelFor(model => model.ContactNumber, "contact number ")
   @Html.TextBoxFor(model => model.ContactNumber)

..清除它们的最佳做法是什么?

(我将根据Ehsan的回复更新此内容)

目的只是清除表格上的所有控件。我不想"处理"任何方式的当前模型。表单实际上是在jQuery选项卡中,模型是从" parent" view,of:Index()

//Create the model within Index()
 var commsModel = new CommunicationModel
        {
            CustCommsModel = custCommsModel,
            EngineerCommsModel = engineerCommsModel
        };

        return View(commsModel);

所以,在我的孩子看来,我相信以下内容会起作用:

 $.ajax({ url: "/Communications/Index", type: "GET"});

它正确调用了我已经添加了ModelState.Clear()的Index()动作方法;即

ModelState.Clear();  
var commsModel = new CommunicationModel
        {
            CustCommsModel = custCommsModel,
            EngineerCommsModel = engineerCommsModel
        };

        return View(commsModel);

但是,即使我可以单步执行代码,仍然不会清除textBox。

   @Html.LabelFor(model => model.ContactNumber, "contact number ")
   @Html.TextBoxFor(model => model.ContactNumber)

有什么想法吗?

的Ta,

瑜珈

1 个答案:

答案 0 :(得分:0)

我假设这个表单将对处理此表单的控制器方法进行POST / GET,然后重新加载表单或显示错误等等......

您可以做的最简单的事情就是在您的控制器方法中捕获表单数据并对其进行处理,而不是将您收到的模型返回给视图,只需实例化一个新模型并将其返回给您的视图。您还需要清除模型ViewState

您的方法可能看起来像这样

public ActionResult ProcessForm(SomeModel Model)
{
    //process model

    var NewModel = new SomeModel();
    ModelState.Clear();
    return view(NewModel);
}

此时,将重新加载表单并清除所有输入。