如何通过ActionLink传递Model Value

时间:2012-08-14 16:35:20

标签: asp.net-mvc

我有一个模型车辆实体的简单模型。 它有以下属性: 模型 使 颜色 RegistrationPlate

在创建视图上,我希望用户能够使用注册板自动填充模型/制作/颜色信息来执行服务器查找。

因此我正在尝试创建一个像这样的动作链接:

@Html.ActionLink("Look up registration", "RegLookup", "Vehicle", Model.Registration)

其中RegLookup是车辆控制器中的get ActionResult方法,该方法消失并根据传递给它的注册字段查找模型/品牌/颜色信息。从单独的数据库中检索Make / Model / Color信息。

但是目前在渲染视图时 - 甚至在进入动作链接之前 - 会抛出异常,表明模型是空的。

我想要传递的内容实际上是代表注册的文本框中的值:

@Html.EditorFor(model => model.Registration)

如何通过此值?

3 个答案:

答案 0 :(得分:3)

在您的CreateView中,通常您的模型属性应该是空的,除了一些预先准备好的值,如下拉列表。您应该使用的是使用jQuery ajax对action方法进行异步调用,该方法根据注册板返回相关数据并填写表单

您可以保留此行动链接

@Html.ActionLink("Look up registration", "RegLookup", "Vehicle",
                                                      new {@id="check"},null)

并将javascript函数附加到它的click事件以进行ajax调用

$(function(){

  $("#check").click(function(e){
    e.preventDefault();
    var item=$(this);
    var regPlateVal=$("#RegistrationPlate").val();
    $.getJSON(item.attr("href")+"?registration="+regPlateVal,function(data){
       if(data.Status=="success")
       {
         $("#Color").val(data.Color);
         $("#Model").val(data.Model);
       }
    });
  });

});

假设您的RegLookUp操作方法接受参数(名称为registration)并以JSON格式返回数据,如下格式

{
  "Status": "success",
   "Color": "Red",
   "Model": "2011"
}

答案 1 :(得分:0)

您需要传递查询字符串中的属性:

@Html.ActionLink(
    "Look up registration", 
    "RegLookup", 
    "Vehicle", 
    new {
        registration = Model.Registration
    }
)

然后控制器操作可以使用此registration参数:

public ActionResult RegLookup(string registration)
{
    ...
}

答案 2 :(得分:0)

您需要执行普通的POST或AJAX,以将板号发送到服务器。在您的视图中,在设计时您没有用户输入的值。