所有ActionResult参数都应该是Nullable吗?

时间:2017-09-17 17:21:26

标签: c# asp.net-mvc

请参阅以下代码:

[HttpPost]
public ActionResult Details(Guid personID)
        {
            //do some work
        }

如果用户在不传递personID的情况下浏览详细信息,则应用程序错误。你怎么处理这个?使用Web窗体我会测试页面加载开始时参数不为null。但是,MVC无法做到这一点。

3 个答案:

答案 0 :(得分:0)

您可以使参数为空,并在访问参数之前检查该参数是否为空。

public ActionResult Details(Guid? personID)
{
    if(personID!=null)
    {
        // use personID.Value 
    }
    else
    {

    }
    // to do : return something
}

对于你的http post action mehod,你也可以这样做。但是你需要为http get和action方法提供唯一的方法签名。所以我假设您在HttpPost操作方法中有更多参数。

答案 1 :(得分:0)

有两种方式,

首先使用Default值参数并检查Guid.Empty

其次使用nulable参数并检查HasValue属性

默认参数示例

[HttpPost]
public ActionResult Details(Guid personID = Guid.Empty)
{
    if(personID == Guid.Empty)
    {
        //do some work
    }
    else
    {
        // do some work
    }        
}

Nulable参数样本

public ActionResult Details(Guid? personID)
{

    if(personID.HasValue)
    {
        //do some work
    }
    else
    {
        // do some work
    }        
}

答案 2 :(得分:0)

你可以使用如下的可空参数:

$('.wrapper').asortable({
    placeholder: 'ui-state-highlight',
    forceHelperSize: true,
    start: function( event, ui ) {
            console.log('start: ');
            console.log(ui);
        },
        stop: function( event, ui ) {
            console.log('stop: ');
            console.log(ui);
        },
        create: function( event, ui ) {
            console.log('create: ');
            console.log(ui);
        },
        change: function( event, ui ) {
            console.log('change: ');
            console.log(ui);
        },
        receive: function(event, ui) {
            console.log('receive: ');
            console.log(ui);
        },
        update: function( event, ui ){
            console.log('sort: ');
            console.log(ui);
        },

});

因此,您可以使用正确的数据类型调用该方法,或者将null作为参数传递。