2013-04-23 41 views
1

我正在第一次开发ASP.NET MVC3网站。在我的开发机器上一切正常。ASP.NET MVC:测试服务器上的路由错误

我bin在我们的测试机器上部署了所有东西。经过一番缺少DLL发出的网站似乎在以下网址工作:

http://localhost/Test%20Website 

但是当我点击以下链接(这是由内嵌的JavaScript,因为我使用的Infragistics网格创建这是不相关的问题):

<a href=\"/Patient/Edit/' + val + '\"><img src=\"../Resources/Edit.png\" align=\"left \"></a> 

我得到HTTP错误404.0 - 未找到,这是合乎逻辑的,因为物理路径:C:\的Inetpub \ wwwroot的\耐心\编辑\ 537

虽然物理路径应该是:C:\ inetpub \ wwwroot \ Test Website \ Views \ Patient \ Edit \ 537(atleast ......我想......不明白MVC路由是怎么工作的)

这是通过使用ActionLink的HTML帮助和这样的做工精细的方式进行的链接。 所以此工程: @ Html.ActionLink( “关于”, “关于”, “主页”) 而这个作品: @ Html.Partial( “搜索”,新SearchModel())

所以,我的问题是,你如何解决这些问题?

P.S:在资源所有的图像都不能工作。 答案

对不起后感叹

UPDATE,apparantly需要注意的是这发生在一个javascript函数作为字符串是很重要的。这是因为我使用了Infragistic的JQuery网格中的FormatterFunction。好吧,这是我到目前为止:

"function(val) {return '<a href=\"" + @Url.Content("~/Patient/Edit/" + val) + "\"><img src=\"../Resources/Edit.png\" align=\"left\"></a>'; }" 

名称'val'在当前上下文中不存在,这是逻辑的。但我不知道如何解决这个问题,因为我对javascript/Razor /等的知识有限......请帮忙吗?在这种情况下,Val就是它所绑定列的值。在这种情况下,患者的ID。

Ego4eg要求更多的代码

它的Infragistics JQuery的网格。这个网格有一个FormatterFunction,它有一个字符串作为参数。这个字符串需要是一个javascript函数。给你一个想法,这看起来像这样:

@(Html.Infragistics() 
.Grid(Model) 
.ID("grid1") 
.AutoGenerateColumns(false) 
.Columns(column => { 
    //column.For(p => p.ID).FormatterFunction("function(val) {return '<a href=\"/Patient/Edit/' + val + '\"><img src=\"../Resources/Edit.png\" align=\"left\"></a>'; }").Width("25px").HeaderText(" "); 
    column.For(p => p.ID).FormatterFunction("function(val) {return '<a href=\"" + @Url.Action("Edit", "Patient", new { id = val }) + "\"><img src=\"../Resources/Edit.png\" align=\"left\"></a>'; }").Width("25px").HeaderText(" "); 
    column.For(p => p.ID).FormatterFunction("function(val) {return '<a href=\"/Home/CreateRemark/?patientID=' + val + '\"><img src=\"../Resources/add.png\" align=\"left\"></a>'; }").Width("25px").HeaderText(" "); 
    column.For(p => p.FullName).DataType("string").HeaderText("Naam").Width("250px"); 
    column.For(p => p.Address).DataType("string").HeaderText("Adres").Width("400px"); 
    column.For(p => p.BSN).DataType("string").HeaderText("BSN").Width("85px"); 
    column.For(p => p.DateOfBirthAsString).DataType("string").HeaderText("Geboortedatum").Width("85px"); 
    column.For(p => p.GeneralPractitionerName).DataType("string").HeaderText("Huisarts"); 
}) 

希望这会有所帮助。

回答

1

这将是更好地使用Url.Content像:

<a href=\"@Url.Content("~/Patient/Edit/" + val)\"> 
+0

的波浪难道不上的第一个例子工作,但第二个是精... – Steve 2013-04-23 10:25:51

+0

真的,我编辑答案。 – Egor4eg 2013-04-23 10:29:53

+0

首先,非常感谢您的回答。我现在在这几个小时。第二,看起来很重要的是它是一个内联的JavaScript函数,它是一个字符串,所以我更新了我的问题。希望你能帮助。请在底部查看更新的问题。 – 2013-04-23 12:38:12

0

试试这个:

<a href ="Url.Action("Edit", "Patient", new { id = val })" /> 
+0

首先,非常感谢您的回复。最后你的回答也很好。但Egor4eg帮助我得出了最终结论,所以他值得信任。 – 2013-04-24 08:24:17