我有一个PartialView,它记录一个Model ID,然后在您单击链接时将Model ID发送给Controller。我的问题是,有两种方法可以将数据从View发送到Controller,但只有一种对我有用。是什么原因?
这对我来说很完美
Useless use of "-"
这没用
<a type="button" class="btn btn-primary" asp-controller="Dictionary" asp-action="Edit" asp-route-wordId="@Model"><i class="fas fa-edit"></i></a>
我的问题是,如果我将模型ID传递给URL,为什么最后一个不起作用并返回null
这是我的完整PartialView,可以接收模型ID,并且可以正常工作
<a type="button" class="btn btn-success" href="@Url.Action("Edit/" + Model)"><i class="far fa-list-alt"></i></a>
这是我的控制器功能,可以记录数据
@model int
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">
<td style="width:150px">
<div class="btn-group" role="group">
<a type="button" class="btn btn-primary" asp-controller="Dictionary" asp-action="Edit" asp-route-wordId="@Model"><i class="fas fa-edit"></i></a>
</div>
</td>
答案 0 :(得分:2)
您正在使用的Url.Action
重载接受一个操作名称,并且您正在向其中传递类似/Edit/4
的名称。您需要使用Url.Action
方法的适当重载,该方法允许您指定路由值。
类似于以下内容:
<a type="button" class="btn btn-success" href="@Url.Action("Edit/" + Model)"><i class="far fa-list-alt"></i></a>
到
<a type="button" class="btn btn-success" href="@Url.Action("Edit", new { wordId = Model } )"><i class="far fa-list-alt"></i></a>`
请注意,您的Edit
动作采用了可为空的wordId
,这对我来说意义不大。通常,如果您正在编辑某些内容,则说明该内容已经创建,并且应始终具有id
。我能想到的唯一情况是,如果Edit
动作实际上处理创建数据以及编辑数据的情况,那将是完全有效的。
答案 1 :(得分:0)
要回答您的主要问题,您的第一个锚起作用的原因是因为args正确。 例如:
Comparator<MyObject> xyzComparator = new Comparator<MyObject>() {
@Override
public int compare(MyObject o1, MyObject o2) {
int diff = Boolean.compare(o1.isX(), o2.isX());
if (diff != 0) {
return diff;
}
diff = Boolean.compare(o1.isY(), o2.isY());
if (diff != 0) {
return diff;
}
diff = Boolean.compare(o1.isZ(), o2.isZ());
// return whether 0 or not
return diff;
}
};
Collections.sort(myList, xyzComparator);
等效于:
<a asp-controller="Dictionary" asp-action="Edit" asp-route-wordId="1">Your link</a>
那行得通!
由于您滥用<a href="/Dictionary/Edit/1"></a>
,第二种方法不起作用,您使用的方法是此Url.Action
Url.Action("Action")
正在搜索名为“ Edit / 1”的操作,在您的情况下将找不到该操作。
所以在您的第二个无效示例中
Url.Action("Edit/" + Model) or Url.Action("Edit/1")
等效于:
<a href="@Url.Action("Edit/" + Model)">Your Link</a>
在您的情况下,您应该在锚点中使用它:
<a href="null" />
等效于 / Dictionary / Edit / 1
如此:
Url.Action("Edit", "Dictionary", new { id = @Model })