在NerdDinners示例之后,我有兴趣创建一个强类型的母版页.为了实现这一点,我使用一个基本控制器来检索母版页的数据.所有其他控制器都继承此类.同样,我有ViewModels主页和任何其他视图.视图ViewModel类继承自母版页ViewModel.
子控制器应该如何确保将母版页的数据传递给View而不设置ViewModel与母版页本身相关的属性?
我的母版页将显示一些按钮,这些按钮在XML文件中确定,因此Buttons我填充的类.
MasterPage ViewModel代码段
using System.Collections.Generic;
namespace Site1.Models
{
public class MasterViewModel
{
public List<Button> Buttons{set; get;}
}
}
Run Code Online (Sandbox Code Playgroud)
视图 ViewModel
namespace Site1.Models
{
public class View1ViewModel : MasterViewModel
{
public SomeDataClass SomeData { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
using System.Collections.Generic;
using System.Web.Mvc;
using Site1.Models;
namespace Site1.Controllers
{
public abstract class BaseController : Controller
{
protected MasterViewModel model = new MasterViewModel();
public BaseController()
{
model.Buttons …Run Code Online (Sandbox Code Playgroud) 我正在使用设计进行用户身份验证.但是,当用户尝试创建帐户时,我收到此错误:
NameError (undefined local variable or method `devise_parameter_sanitizer'
Run Code Online (Sandbox Code Playgroud)
这就是我的设计注册控制器的样子:
def sign_up_params
devise_parameter_sanitizer.for(:sign_up)
end
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
提前致谢
我有一些常见的组件,它们始终存在于给定Controller类所服务的每个页面中.
在每个@RequestMapping方法的开头,我使用这些常见组件填充模型.
有没有办法定义在每个控制器方法之前调用的方法,以便我可以将所有这些复制/粘贴到一个地方?
让我们说我正在使用一个表单和一个标准的Rails restful控制器创建一个新的Foo,它看起来像这样:
class FoosController < ApplicationController
...
def index
@foos = Foo.all
end
def new
@foo = Foo.new
end
def create
@foo = Foo.create(params[:foo])
if @foo.save
redirect_to foos_path, :notice => 'Created a foo.'
else
render 'new'
end
end
...
end
Run Code Online (Sandbox Code Playgroud)
所以,如果我使用标准的REST风格的控制器(如上),然后当我创建我的富example.com/foos/new,如果我提交表单,它可以正确保存我在example.com/foos显示索引操作.但是,如果未正确填充表单,则会再次呈现表单并显示错误消息.这一切都是普通的香草.
但是,如果显示错误,将呈现表单页面,但URL将是example.com/foos,因为CREATE操作会发布到该URL.但是,人们期望找到Foos #index at example.com/foos,而不是他们刚刚提交的表单,并添加了错误消息.
这似乎是Rails的标准行为,但它对我来说并没有多大意义.显然我可以重定向回new而不是从create动作渲染new,但问题是错误消息等会随着内存中部分完整的Foos而丢失.
有没有一个干净的解决方案来解决这个问题,example.com/foos/new当他们提交的新Foo表单中存在错误时,可以将人们发送回去吗?
谢谢!
我想在2个单独的HTML元素上使用控制器,并使用$ rootScope在编辑一个时保持2个列表同步:
HTML
<ul class="nav" ng-controller="Menu">
<li ng-repeat="item in menu">
<a href="{{item.href}}">{{item.title}}</a>
</li>
</ul>
<div ng-controller="Menu">
<input type="text" id="newItem" value="" />
<input type="submit" ng-click="addItem()" />
<ul class="nav" ng-controller="Menu">
<li ng-repeat="item in menu">
<a href="{{item.href}}">{{item.title}}</a>
</li>
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
JS
angular.module('menuApp', ['menuServices']).
run(function($rootScope){
$rootScope.menu = [];
});
angular.module('menuServices', ['ngResource']).
factory('MenuData', function ($resource) {
return $resource(
'/tool/menu.cfc',
{
returnFormat: 'json'
},
{
getMenu: {
method: 'GET',
params: {method: 'getMenu'}
},
addItem: {
method: 'GET',
params: {method: 'addItem'}
}
}
);
});
function Menu($scope, …Run Code Online (Sandbox Code Playgroud) 假设我有一个控制器用于正在呈现的页面ng-view.
此控制器绑定到外部源(例如应用程序范围的消息总线)的某些事件以更新其模型.这基本上非常简单:
function MyController ($scope) {
$scope.bar = '…';
externalSource.on('foo', function (data) {
$scope.$apply(function () {
$scope.bar = data.bar;
});
});
}
Run Code Online (Sandbox Code Playgroud)
问题是:如果控制器与其关联的视图不再显示,我如何从外部源取消绑定控制器?
是否存在诸如dispose事件或类似事物之类的东西?
或者我的方法是完全错误的,我应该以其他方式处理类似的事情?如果是这样,怎么样?
我有这条路线:Route::controller('/', 'PearsController');在Laravel中是否可以让PearsController从另一个控制器加载一个方法,这样URL就不会改变?
例如:
// route:
Route::controller('/', 'PearsController');
// controllers
class PearsController extends BaseController {
public function getAbc() {
// How do I load ApplesController@getSomething so I can split up
// my methods without changing the url? (retains domain.com/abc)
}
}
class ApplesController extends BaseController {
public function getSomething() {
echo 'It works!'
}
}
Run Code Online (Sandbox Code Playgroud) 我在我的Twig模板中调用了这样的渲染(第18行)
{{ render(controller('AcmeReadingBundle:Default:newAction')) }}
Run Code Online (Sandbox Code Playgroud)
控制器是
public function newAction(Request $request)
{
$message = new Message();
$form = $this->createFormBuilder($message)
->add('body', 'text')
->add('save', 'submit')
->getForm();
$form->handleRequest($request);
return $this->render('AcmeReadingBundle:Default:new.html.twig', array(
'form' => $form->createView(),
));
}
Run Code Online (Sandbox Code Playgroud)
而new.html.twig文件是
{{ form(form) }}
Run Code Online (Sandbox Code Playgroud)
我一直收到这个错误:
An exception has been thrown during the rendering of a template ("The controller for URI "/_fragment" is not callable.") in AcmeReadingBundle:Default:show.html.twig at line 18.
Run Code Online (Sandbox Code Playgroud) 我有以下代码片段我想用@ url.action传递data-id ="0",我该怎么做
<a class="v-patient pointer" data-id="0" href="@Url.Action("View1", "Task")">View Patient</a></td>
Run Code Online (Sandbox Code Playgroud)
我的任务控制器
public ActionResult View1(string id)
{
return View();
}
Run Code Online (Sandbox Code Playgroud) 我是Spring Boot的新手.我正在使用SpringBoot和Thymeleaf创建一个非常基本的应用程序.在控制器中我有两种方法如下:
Method1 - 此方法显示数据库中的所有数据:
@RequestMapping("/showData")
public String showData(Model model)
{
model.addAttribute("Data", dataRepo.findAll());
return "show_data";
}
Run Code Online (Sandbox Code Playgroud)
Method2 - 此方法将数据添加到数据库:
@RequestMapping(value = "/addData", method = RequestMethod.POST)
public String addData(@Valid Data data, BindingResult bindingResult, Model model) {
if (bindingResult.hasErrors()) {
return "add_data";
}
model.addAttribute("data", data);
investmentTypeRepo.save(data);
return "add_data.html";
}
Run Code Online (Sandbox Code Playgroud)
HTML文件与这些方法相对应,即show_data.html和add_data.html.
一旦addData方法完成,我想显示数据库中的所有数据.但是,上面的代码会将代码重定向到静态add_data.html页面,并且不会显示新添加的数据.我需要以某种方式调用控制器上的showData方法,因此我需要将用户重定向到/ showData URL.这可能吗?如果是这样,怎么办呢?
提前致谢.
controller ×10
angularjs ×2
url ×2
asp.net-mvc ×1
data-binding ×1
devise ×1
events ×1
html-helper ×1
java ×1
javascript ×1
laravel ×1
master-pages ×1
php ×1
razor ×1
render ×1
spring-boot ×1
spring-mvc ×1
symfony ×1
thymeleaf ×1
view ×1
viewmodel ×1