2012-08-14 107 views
2

我有一个模型车辆实体的简单模型。 它的属性: 型号 让 颜色 RegistrationPlate如何通过ActionLink传递模型值

在创建视图我想用户能够执行服务器查找使用车牌自动填补模型/制作/颜色信息。

因此我想创建这样一个动作链接:

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

凡RegLookup是在车辆控制器,它就会消失,并认为基于该模型/制作/色彩信息的获取方法的ActionResult注册字段传递给它。制造商/型号/颜色信息从单独的数据库中检索。

但是,目前在渲染视图时(甚至在进入动作链接之前)抛出异常,指示模型为空。

我想通过传递实际上是从代表注册文本框中的值:

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

我如何通过通过这个价值?

回答

3

在您的CreateView中,通常您的模型属性应该大部分为空,除了某些预先计算好的值(如下拉列表)之外。你应该用的是使用jQuery AJAX进行异步调用返回基于车牌的相关数据的操作方法,并填写在表单

你可以保持这样的

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

并附加一个JavaScript函数来它的点击事件,使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 action方法接受一个参数(有名字registration)和返回数据格式像下面的格式

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

谢谢Shyju - 我会去那个 – 2012-08-14 17:00:52

+0

Erg我有点卡住了。我如何给EditorFor #RegistrationPlate名称? – 2012-08-15 16:35:29

+0

@ChrisNevill:我不明白你的意思!我建议你不要在评论部分提出新的问题。请把它作为一个新的问题与相关细节 – Shyju 2012-08-15 17:03:04

0

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

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

,然后控制器动作可以借此registration参数:

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

感谢Darin,我仍然在Model对象上得到NullReferenceException。 – 2012-08-14 16:53:12

+0

你在说什么'Model'对象?你的RegLookup控制器动作是做什么的?它是否将模型传递给视图?如果是这样,你确保这个模型不是null? – 2012-08-14 16:57:03

+0

从不调用RegLookup控制器操作。第一次呈现视图时发生NullReferenceException。 – 2012-08-14 16:59:27

0

您需要做一个普通的POST或者和AJAX一起发送板号给服务器。在你看来,在设计时你没有用户输入的价值。

+0

这是我的理解,我不能通过一个操作链接发布帖子?我已经使用提交按钮来提交创建。所以我想我需要使用AJAX。这对于这样一个简单的任务似乎很麻烦。 – 2012-08-14 16:55:10

+0

@ChrisNevill,不那么凌乱......只是使用Shyju的答案......它是相当完整的......只是让你的控制器返回一个Json对象,你就完成了。 – Romias 2012-08-14 17:18:46