0

我有一个通过调用动作呈现的视图,我将视图模型传递给它,例如 Vm1,然后填充一些下拉列表。

在这个视图中,我有一个带有一些文本框和一个“过滤器”按钮的“过滤器”部分,我想调用另一个操作来传递文本框的值,然后在 div 内的页面上部分呈现第二个视图.

所以我已经这样做了,当单击“过滤器”按钮时,我的操作如下所示,由 ajax 调用:

ActionResult ActionName (string inputText1, string inputText2, string inputText3, ...)

因为我有大约 10 个文本框,所以我想创建一个新的 c# 对象并将该对象传递给这个动作,看起来像这样更简单:

ActionResult ActionName(MyActionFilters myFilters)

如何做到这一点?

4

3 回答 3

1

你可以有一个模型如下

public class MyActionFilters
{
  public string Property1{get;set;}
  public string Property2{get;set;} 
  public string[] Property3{get;set;} 

  // add any number of properties....
}

您可以在 Get Action 方法中传递空模型

ActionResult ActionName()
{
  MyActionFilters myEmptyActionFilers= new MyActionFilters();
  View(myEmptyActionFilers)
}

在表格中

Html.TextBoxFor(model => model.Property1)
Html.TextBoxFor(model => model.Property2)

然后在 post 方法中,您可以访问以我已删除先前代码的形式填充的模型。新代码在编辑标签之后:)

编辑:对不起,我不在。使用 AJAX 可以轻松实现这种功能:)

它如下所示。

[HttpPost]
PartialViewResult ActionName(MyActionFilters myActionFilers)// this is magic
{
  /*you can access the properties here like myActionFilers.Property1 and pass the 
    same object after any manipulation. Or if you decided have a model which contains 
    a variable to hold the search results as well. That is good.*/

   return PartialView(myActionFilers);
}

到目前为止,这是一个很好的例子。

并且不要忘记将jquery.unobtrusive-ajax.js脚本引用添加到您的视图中。如果不是 Ajax 将不会影响。在给定的示例中,他已经在 _Layout 中完成了,如您所见。

PS:明智地选择将要传递给视图的模型的属性并享受 Ajax!

于 2013-02-25T18:08:03.833 回答
0

您需要将表单输入名称设置为 ViewModel 的属性,然后 MVC 会做一些魔术例如:

public class FormViewModel {
    public string input1 {get;set;}
    public string input2 {get;set;}
    // and so on
}

然后在您的操作上:

public ActionResult FormPost(FormViewModel model) {
    // you'll have access to model.input1, model.input2, etc
}

最后,例如,在您想要创建的 HTML 表单上:

<input type="text" name="input1" />
<input type="text" name="input2" />

或者您可以使用Html.TextBoxFor(model => model.Input1),助手将正确命名所有内容。

于 2013-02-25T17:48:02.140 回答
0

输入标签的名称属性,应以对象名称(“MyActionFilters”)为前缀

例如:

<input type="text" name="MyActionFilters.YOUR_PROPERTY_NAME" />

顺便说一句,您的操作方法应使用 HttpPost 属性进行注释。

[HttpPost] ActionResult ActionName(MyActionFilters myFilters)

于 2013-02-25T17:49:46.807 回答