我正在研究一个基本的问题管理系统,以便学习ASP.NET MVC.我已经把它运行到相当不错的水平,但我遇到了一个问题.
我有一个名为Issue的控制器,其视图名为Open./ Issue/Open列出当前系统上记录的所有未解决问题.我已经定义了这样的路线:
routes.MapRoute(
"OpenSort", // Route name
"Issue/Open/{sort}", // URL with parameters
new { controller = "Issue", action = "Open", sort = "TimeLogged" } // Parameter defaults
);
Run Code Online (Sandbox Code Playgroud)
到目前为止,这是正常工作,使用IssueController.cs中的以下代码:
public ActionResult Open(string sort)
{
var Issues = from i in db.Issues where i.Status == "Open" orderby i.TimeLogged ascending select i;
switch (sort)
{
case "ID":
Issues = from i in db.Issues where i.Status == "Open" orderby i.ID ascending select i;
break;
case "TimeLogged":
goto default;
case "Technician":
Issues …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个通用控制器,即:
public class MyController<T> : Controller where T : SomeType
{ ... }
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用它时,我到处都遇到了这个错误......
控制器名称必须以"控制器"结尾
所以,我的问题,是否有可能在asp.net mvc中创建一个通用控制器?
谢谢!
我见过很多人谈论在他们的ASP.NET MVC项目中使用基本控制器.我见过的典型例子就是记录或者CRUD脚手架.基本控制器类有哪些其他好的用途?
在我的几个控制器中,我有重定向/ flash消息
redirect_to products_url, :notice => "message here",
redirect_to states_url, :error => "oops!" etc...
Run Code Online (Sandbox Code Playgroud)
但是,在我的会话控制器中,成功验证后,我有flash [:success] ="welcome!" redirect_to用户
我希望能够在我的其他控制器中做类似的事情:success =>"yay!"
这主要是为了美观/一致性目的,但是:注意,:警告和:错误唯一可用的闪存类型/我可以添加其他类型吗?我有道理吗?
谢谢!
各位晚上好,
我已经在这个主题上发现了很多帖子,但我仍然无法将一个对象从Controller1传递给Controller2.有没有一个完整的教程或一些示例项目,这样做?
在我遇到困难之前,我已经走到了这一步:
国家级
public class Country {
private SimpleStringProperty country = new SimpleStringProperty("");
//Constructor
public Country() {
}
//GETTERS
public String getCountry() {
return country.get();
}
//SETTERS
public void setCountry(String value) {
country.set(value);
}
@Override
public String toString() {
return getCountry();
}
}
Run Code Online (Sandbox Code Playgroud)
程序启动时,主要的FXML被加载(Sample.fxml).其中包含一个边框窗格,顶部面板中有一个菜单栏,中间有一个内容窗格.在初始化时,我创建一个新的Country对象并将其存储在全局变量中.我有一个方法,当单击一个菜单项时,将另一个FXML加载到内容窗格中:
SampleController.java
public class SampleController implements Initializable {
@FXML
private Pane pContent;
private Country c;
@FXML
private void handleButtonAction(ActionEvent event) throws IOException {
System.out.println(c); //this prints Belgium, which is correct
URL url = getClass().getResource("Sub1.fxml");
FXMLLoader fxmlloader …Run Code Online (Sandbox Code Playgroud) 在这个 tutotial中,是一个如何包含自定义组件并使用来自容器控制器的控制器的示例.
main_window_content.fxml
<VBox fx:controller="com.foo.MainController">
<fx:include fx:id="dialog" source="dialog.fxml"/>
...
</VBox>
Run Code Online (Sandbox Code Playgroud)
MainController.java
public class MainController extends Controller {
@FXML private Window dialog;
@FXML private DialogController dialogController;
..
Run Code Online (Sandbox Code Playgroud)
如果组件只包含一次,它可以正常工作.如果包含两次相同的组件,则不会初始化控制器.两个控制器都为空.
main_window_content.fxml
<VBox fx:controller="com.foo.MainController">
<fx:include fx:id="dialog1" source="dialog.fxml"/>
<fx:include fx:id="dialog2" source="dialog.fxml"/>
...
</VBox>
Run Code Online (Sandbox Code Playgroud)
MainController.java
public class MainController extends Controller {
@FXML private Window dialog1;
@FXML private DialogController dialogController1;
@FXML private Window dialog2;
@FXML private DialogController dialogController2;
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解决问题吗?谢谢
这是我的FXML加载代码.它在主应用程序中执行:
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("main_window_content.fxml"));
stage.setTitle("FXML Welcome");
stage.setScene(new Scene(root, 300, …Run Code Online (Sandbox Code Playgroud) 我需要,对于我的控制器中的每个操作,检查这些操作是否由ajax请求调用.
如果是,则不附加任何内容,如果不是,我需要重定向到主页.
我刚刚发现if($this->getRequest()->isXmlHttpRequest()),但我需要在每个动作上添加此验证.
你知道更好的方法吗?
我有一个基本控制器类:
而我所有的其他控制器都像这样继承了这个BaseClass
所有这些在MVC3中运行良好(今天再次测试,它确实有效)但似乎在MVC 4 beta中不再触发BaseController中的ExecuteCore.
任何的想法?或者任何巨大的变化都在引擎盖下?非常感谢.
public class BaseController : Controller
{
private string _myData;
public string MyData
{
get
{
return _myData;
}
}
protected override void ExecuteCore()
{
_myData = "I am doing something";
base.ExecuteCore();
}
}
public class HomeController : BaseController
{
public ActionResult Index()
{
ViewBag.MyData = MyData;
// Doing something with value in BaseClass
return View();
}
}
Run Code Online (Sandbox Code Playgroud) 我在@Controller @RequestMapping方法中得到了这样的参数:
@ModelAttribute("myCandidate") @Valid Candidate myCandidate,
BindingResult result
Run Code Online (Sandbox Code Playgroud)
如何为myCandidate明确指定验证组?
脚本
我正在创建一个GUI,其中多个视图引用相同的模型对象.
我习惯了什么
在Swing中,如果我希望所有视图都引用相同的模型,我会将模型传递给构造函数.
我目前正在做什么
在JavaFX中,我通过在每个视图/控制器加载后在视图/控制器(菜单栏,拆分窗格,制表符......)中设置setter方法来传递模型.我发现这非常俗气和笨重.另外,我发现它不起作用,因为在某些情况下我需要在初始化某些控制器小部件之前模型已经存在于控制器中.
Lackluster Alternatives
(注意:我正在引用这些stackoverflow问题:
依赖注入
将模型对象保存为公共静态变量
将参数从调用者传递到控制器
我希望每个控制器在其构造函数中加载自身,并且我希望每个自定义控制器自动注入其父控制器.例如,卡片概述选项卡会像这样加载自身:
public CardOverviewTab() {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("card_overview_tab.fxml"));
fxmlLoader.setRoot(content);
fxmlLoader.setController(this);
try {
fxmlLoader.load();
} catch (Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)并且SingleGameSetup控制器将卡概述选项卡自动注入变量:
public class SingleGameSetupController extends AnchorPane {
@FXML private CardOverviewTab cardOverviewTab;
// Rest of the class
}
Run Code Online (Sandbox Code Playgroud)包含卡片概述选项卡的fxml部分如下所示:
<CardOverviewTab fx:id="cardOverviewTab" />
Run Code Online (Sandbox Code Playgroud)这样我不需要担心手动加载控制器,但我仍然有设置模型的问题.
在FXMLLoader上设置控制器
活动巴士
独生子
我在寻找什么
有没有办法以不那么繁琐的方式传递模型对象?我正在寻找一种简单的方法,如将模型传递给构造函数,但我不想处理通过FXMLLoader手动加载控制器,或者在加载控制器后设置模型.也许有一个类来检索模型是最好的选择,但我要求以防万一有更好的方法.