我在html操作链接的webproject上有导航和许多链接.它们很难看下划线.我想插入一些带有名字的图像或玩动作风格链接.可能吗?怎么做?
感谢并保重,Ragims
我在MVC控制器中创建了大量的操作.
public ActionResult DoSmth1(string token)
public ActionResult DoAnother2(string token)
Run Code Online (Sandbox Code Playgroud)
当我必须调用ActionLink时..
=Html.ActionLink<SomeController>( x=> x.DoSmth(item.property), item.property)
=Html.ActionLink<AnotherController>( x=> x.DoAnother(item.property), item.property)
Run Code Online (Sandbox Code Playgroud)
...它会生成不同的网址:
/Some/DoSmth/stringvalue
/Another/DoAnother?property=stringvalue
Run Code Online (Sandbox Code Playgroud)
在哪里设置构建URL的方式?我也没有想法...((
好的,有一点方法: - 如果属性名称与路由模式中使用的相同 - 例如controller,action和id - MVC将始终使用路由构建器(/ c/a/id).
这有点帮助(所以 - 尽可能将参数命名为"id"))
但整体问题仍然有效......
必须与路径中的令牌命名相同
确切地说 - 我第一次有这个想法.
但是 - 现在我只有默认路由({controller}/{action}/{id})但是仍然在斜杠中有"属性"的URL ...这很奇怪.
在我的ASP.NET MVC应用程序中,我希望用户将值添加到文本框中,然后按我的Ajax.ActionLink.我想做这样的事情:
Ajax.ActionLink("Go","Action","Controller",new {value = textbox1.value})
或者我怎么能将这个文本框值恢复到我的行动?jQuery的?
我有一个视图,其中包含以下代码:
<h2><%= Model.Company.CompanyName %></h2>
<h3>Projects</h3>
<ul>
<%
foreach (Project p in Model.Company.Projects)
{
%>
<li><%= Html.ActionLink(p.ProjectName,"Details", "Projects", new {id=p.ProjectID,companyId=p.CompanyID}) %></li>
<%
}
%>
</ul>
<%= Html.ActionLink("Add Project", "Create", "Projects", new {id = Model.CompanyID}) %>
<br />
<h3>Users</h3>
Run Code Online (Sandbox Code Playgroud)
我有一个ProjectsController但是当我运行应用程序并单击Add Project Link时,它希望转到/ Company/Create而不是/ Projects/Create.我错过了什么吗?
所有,
掌握ASP.NET MVC.到目前为止,这么好,但这个有点疯了.
我有一个视图模型,其中包含超链接的属性字典,如下所示:
menu =模型变量
Html.ActionLink(Html.Encode(menu.Name), Html.Encode(menu.Action), Html.Encode(menu.Controller), menu.Attributes, null)
Run Code Online (Sandbox Code Playgroud)
问题是"menu.Attributes"的位置需要表单中的对象:
new { Name = "Fred", Age=24 }
Run Code Online (Sandbox Code Playgroud)
据我所知,这个匿名对象实际上是通过反射转换为字典,但是你不能在第一时间将字典传递给它!
为链接生成的Html只显示字典类型.
我到底怎么绕这个?重点是它的一般和控制器可以设置菜单.以前的属性....
基于下面的帖子,我尝试了以下内容:
Html.ActionLink(Html.Encode(menu.Name), Html.Encode(menu.Action), Html.Encode(menu.Controller), new RouteValueDictionary(menu.Attributes), new Dictionary<string,object>())
Run Code Online (Sandbox Code Playgroud)
但这仍然不起作用(我猜代码内部调用带对象的泛型方法?).以上(以及我将字典传递给第4个参数的原始解决方案产生类似于此的HTML:
<a href="/EditRole?Comparer=System.Collections.Generic.GenericEqualityComparer%601%5BSystem.String%5D&Count=1&Keys=System.Collections.Generic.Dictionary%602%2BKeyCollection%5BSystem.String%2CSystem.String%5D&Values=System.Collections.Generic.Dictionary%602%2BValueCollection%5BSystem.String%2CSystem.String%5D">EditDocumentRoles</a>
Run Code Online (Sandbox Code Playgroud)
即它使用反射和工作完全错误...
我试图通过POSTing而不是GETting导航到MVC动作.(该操作是DELETE,我不希望它通过外部链接访问.)
我在生成的网格中使用链接
Ajax.ActionLink("Remove", "Delete", new { saID = Model.Said, id = e.id }, new AjaxOptions { HttpMethod = "POST", Confirm = "Are you sure you want to delete this item?" })
Run Code Online (Sandbox Code Playgroud)
这会生成以下HTML:
<a href="/Equipment/Delete/102424/229933" onclick="Sys.Mvc.AsyncHyperlink.handleClick(this, new Sys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.replace, confirm: 'Are you sure you want to delete this item?', httpMethod: 'POST' });">Remove</a>
Run Code Online (Sandbox Code Playgroud)
我的问题是当我点击链接时,我通过GET而不是POST进入删除操作,并且没有发生确认对话框.我一直在谷歌搜索几个小时,只是不停地缠绕在轴上.我究竟做错了什么?
我正在尝试做的事情:尝试使用"正确的"HTTP删除删除记录.
控制器代码:
[HttpDelete]
public void DeleteRun(int RunId)
{
repository.RemoveEntry(RunId);
}
Run Code Online (Sandbox Code Playgroud)
剃刀查看:
@Ajax.ActionLink("Delete","DeleteRun",new {RunId = run.RunId},
new AjaxOptions() { Confirm = "Are you sure you want to delete this entry?",
HttpMethod = "DELETE",
OnComplete = string.Format("DeleteRunInTable({0})",run.RunId)
})
Run Code Online (Sandbox Code Playgroud)
Javascript(在单独的包含文件中):
function DeleteRunInTable(RunId) {
$("tr[data-runid=" + RunId).remove();
}
Run Code Online (Sandbox Code Playgroud)
链接actionlink方法正在创建:
<a data-ajax="true" data-ajax-complete="DeleteRunInTable(11)" data-ajax-confirm="Are you sure you want to delete this entry?" data-ajax-method="DELETE" href="/Runs/Delete/11">Delete</a>
Run Code Online (Sandbox Code Playgroud)
不确定javascript部分是否有效但不担心它.试着一次迈出一步:).现在它只是像传统标签一样工作,当我点击链接时它只是做一个href的GET请求.当然我得到了404错误,因为我把[HTTPDelete]放在我的控制器上.我对Web开发很陌生,所以我确定在javascript或jquery中还有其他方法可以做同样的事情,但我只是在做我现在知道的事情.
我有一个带有Filter属性的ViewModel,它具有许多我用来过滤数据的属性
例:
class MyViewModel : IHasFilter
{
public MyData[] Data { get; set; }
public FilterViewModel Filter { get; set; }
}
class FilterViewModel
{
public String MessageFilter { get; set; }
//etc.
}
Run Code Online (Sandbox Code Playgroud)
这在使用我的视图时工作正常.我可以设置属性,Model.Filter并将它们传递给Controller.我现在要做的是创建一个ActionLink具有与上述格式一起使用的查询字符串.
我的View从上面生成的查询字符串如下所示:
http://localhost:51050/?Filter.MessageFilter=Stuff&Filter.OtherProp=MoreStuff
Run Code Online (Sandbox Code Playgroud)
我需要在网格中每行进入上面视图的不同视图中生成一个ActionLink.
我试过了:
Html.ActionLink(
item.Message,
"Index",
"Home",
new { Filter = new { MessageFilter = item.Message, }, },
null);
Run Code Online (Sandbox Code Playgroud)
我也尝试将routeValues参数设置为:
new MyViewModel { Filter = new FilterViewModel { MessageFilter = item.Message, }, },
Run Code Online (Sandbox Code Playgroud)
但是这些不会像上面那样生成查询字符串.
我在.net 4.0中使用MVC.我有一个基本的Html.ActionLink,我希望将多个参数传递给控制器/动作.
每次我调试ActionResult时,只有一个参数通过而另一个是null(取决于哪个是第一个).现在我知道我可以传递复杂的物体,因为我可以让"联盟"对象通过.但是,我不确定为什么我的参数中只有一个可以随时通过.
Code in View :(不要骚扰我ViewBag.我知道它不受欢迎.此外,联盟是一个复杂的对象)
@Html.ActionLink("Sort By WeeK", "Sort", "Schedule",
new { league = ViewBag.League, sortType = "Week" }, null)
Run Code Online (Sandbox Code Playgroud)
控制器中的代码:(这里没有惊喜)
public ActionResult Sort(League league, string sortType)
{
//Do some stuff here
return View("Schedule");
}
Run Code Online (Sandbox Code Playgroud)
我猜测答案将围绕路由.这让我想到了第二个问题.如何在不经常添加新maproutes的情况下使这种类型的ActionLink(动作/控制器/复杂和简单对象的集合)工作.是否有我可以添加的通用/通配符RouteMap,所以我不必经常在解剖学上将相同的路由映射添加到global.asax.或者我希望在我希望传递给Action的对象类型中有一些灵活性,所以我无法预定义确切的签名.
我看过很多关于这个主题的帖子,但没有一个回答我的问题.
我一直试图做一个像这样的动作链接:
<li>@Html.ActionLink("Home", "Index", "Invoice", new { id = "homelink" })</li>
Run Code Online (Sandbox Code Playgroud)
所以我拥有的是linkText,一个actionname,一个控制器名称和一个链接的id.
但是没有与之匹配的签名.最近的一个在控制器名称和htmlattributes之间具有路由值.我没有任何路线值,但我需要放在那里.
有人可以告诉我如何最好地解决这个问题吗?
actionlink ×10
asp.net-mvc ×8
ajax ×3
asp.net ×2
.net ×1
c# ×1
html-helper ×1
http-delete ×1
razor ×1
routevalues ×1
routing ×1