请使用以下脚本.注意字符串'/ Home/Index'.使用T4MVC,有没有办法指定这个摆脱魔法字符串?
<script type="text/javascript">
$(document).ready(function () {
$dialog = $('#dialog');
$dialog.dialog({
autoOpen: false,
buttons: { },
open: function(event, ui) {
$(this).load("/Home/Index");
}
});
});
</script>
Run Code Online (Sandbox Code Playgroud) 我正在尝试将我们的链接切换到T4MVC,并且我的参数不是动作签名的一个小问题.我们有一条类似这样的路线:
http://www.mydomain.com/{fooKey}/{barKey}/{barID}
==>导致BarController.Details(barID).
fooKey和barKey仅添加到链接以用于SEO目的.(因为bar是foo的子实体,我们想在URL中表示该层次结构)
到目前为止,我们会使用
<% =Html.ActionLink(bar.Name, "Details", "Bar", new {barID = bar.ID, fooKey = bar.Foo.Key, barKey = bar.Key}, null)%>
Run Code Online (Sandbox Code Playgroud)
这将导致我们使用BarController.Details(barID),同时在URL中保留fooKey和barKey.
现在我们开始使用T4MVC,我们尝试将其更改为
<% =Html.ActionLink(bar.Name, MVC.Bar.Details(bar.ID), null)%>
Run Code Online (Sandbox Code Playgroud)
由于barKey和fooKey不是Details操作签名的一部分,因此URL中不再显示它们.
有没有办法绕过这个而不必将这些参数添加到动作签名中?
我正在使用.NET 3.5,MVC 2和T4MVC 2.6.42 ......
我有以下行动:
public virtual ActionResult Index(string id, int page = 1)
Run Code Online (Sandbox Code Playgroud)
以下路线:
routes.MapRoute(
"Products", // Route name
"Products/{id}", // URL with parameters
new { controller = "Products", action = "Index", id = UrlParameter.Optional, page = UrlParameter.Optional }, // Parameter defaults
new string[] { "Web.Controllers" }
);
Run Code Online (Sandbox Code Playgroud)
但是当我尝试调用时,MVC.Products.Index("anything")我得到一个"没有重载方法'索引'需要'1'参数"异常.MVC.Products.Index()然而,呼叫是有效的.
我不应该省略"page"参数,因为它默认为'1'?
注意:我已尝试将路由中的页面参数默认为1,但无法正常工作.
注2:还尝试了[可选]属性但没有成功.
我有一种情况,T4MVC正在生成所有内容(意味着intellisense显示所有区域/控制器/操作和所有编译),但是当我运行代码时,我收到T4MVC was called incorrectly运行时错误.
我已经调查了生成的文件并发现对于我的项目中的一个控制器,只有基类中的操作才会生成重写的存根操作.对于其他控制器,正在生成所有操作.它们都具有相同的设置,如下所述.
我有一个BaseController类有一些共享代码(并继承自Controller).在Controllers目录(项目的根目录)中,我有许多控制器,所有控制器都继承自BaseController.
然后我有几个区域.在每个区域中,我有相同的控制器,每个控制器都从根Controllers目录中的同名控制器继承.
运行T4MVC(版本2.6.54),一切正常,除了一个控制器.奇怪的是,intellisense适用于控制器,但在引用实际操作时(在ActionLink()调用中)会产生阻塞.
我手动将一个操作添加到生成的代码中,没有错误.
所以我的问题是,什么会导致T4MVC 不为控制器生成所有代码?缺少的行为都是public virtual ActionResult,行动本身也很好.问题控制器在所有区域都有相同的问题.
一些缩写代码.
/Controllers/BaseController.cs
namespace MyProject.Controllers
{
public abstract partial class BaseController : Controller
{
protected ISession session;
public BaseController()
{
}
// other shared methods/actions
}
}
Run Code Online (Sandbox Code Playgroud)
/Controllers/ActivitiesController.cs(这是问题控制器)
namespace MyProject.Controllers
{
public partial class ActivitiesController : BaseController
{
// for resolving concurrency exceptions
private Activity userValues;
private Activity databaseValues;
public ActivitiesController() …Run Code Online (Sandbox Code Playgroud) 这可能是也可能是不可能的(并且很可能在文档中,但我只是错过了它).
如何在我的视图中使用T4MVC构建Url.Action(),这将允许我使用jQuery选择器.我一直在尝试以下(在我的javascript中)没有成功:
function cancelHoldBooking() {
var url = '<%= Url.Action(MVC.FundProperty.CancelLock($("#propertyid").val())) %>';
// other code omitted for brevity
}
Run Code Online (Sandbox Code Playgroud)
我能够成功地做到以下几点:
function cancelHoldBooking() {
var url = '<%= Url.Action("CancelLock", "FundProperty") %>';
url += "?id=" + $("#propertyid").val();
// other code omitted for brevity - in this case
// **I could of course have used the**:
// var params = {id: $('#propertyid').val()};
// **object**
}
Run Code Online (Sandbox Code Playgroud)
我知道当答案到来时,这将是一个'doh'时刻,但对于我的生活,我无法弄清楚这一点!
干杯...
[编辑] - 我想补充一点,如果我省略MVC.FundProperty.CancelLock()id参数并试图通过$ ajax调用发送params对象,那么编译器会抱怨调用中缺少的参数.因此,我不能通过在CancelLock()调用中调用$ ajax params对象而没有参数来绕过javascript mish-mash.令人沮丧的:(
可能重复:
将数据从Action传递给另一个Action
我有一个视图,我提交一个表单,并根据我想重定向到一个动作的结果.对应于和动作的视图是强类型的,它应该接受ResultsViewModel.
我正在尝试使用T4MVC传递ResultsViewModel.
以下是代码:
[HttpPost]
public virtual ActionResult AddEntity(string viewModel)
{
//Deserialize using Json.NET
var entity = JsonConvert.DeserializeObject<MyEntity>(viewModel);
var success = DoSomething(); //returns boolean
if(success)
{
var result = new ResultsViewModel { MyEntity = entity, MessageId = 1};
return RedirectToAction(MVC.MyController.ResultsPage(result));
}
var result = new ResultsViewModel { MyEntity = entity, MessageId = 2};
return RedirectToAction(MVC.MyController.ResultsPage(result));
}
public virtual ActionResult ResultsPage(ResultsViewModel viewModel)
{
return View(viewModel);
}
Run Code Online (Sandbox Code Playgroud)
当代码到达时
public virtual ActionResult ResultsPage(ResultsViewModel viewModel)
{
return View(viewModel);
}
Run Code Online (Sandbox Code Playgroud)
viewModel始终等于null.
我知道我可以这样做:
return RedirectToAction("ResultsPage", …Run Code Online (Sandbox Code Playgroud) 有没有办法让这个工作:
@foreach (var item in Model.CategoryListByKeywordsDetails)
{
<li>
@Html.ActionLink("ver >", MVC.Ad.ListByCategory(item.Id, (string)ViewBag.keywords))
{
<em>@Html.DisplayFor(modelItem => item.SearchCount)</em> @Html.DisplayFor(modelItem => item.Name) <span class="float-right">ver ></span>
}
</li>
}
Run Code Online (Sandbox Code Playgroud)
我想要结果(我放了空格来显示 HTML 代码):
<a href="/Ad/ListByCategory?categoryId=1&keywords=alfa">
<em>6</em>Carros
<span class="float-right">ver ></span>
</a>
Run Code Online (Sandbox Code Playgroud)