将操作中的参数发送到视图

时间:2015-06-10 09:44:47

标签: asp.net-mvc asp.net-mvc-4

我想从解析并发送该值的操作向视图发送参数。问题是,当参数“到达”视图时,它到达null时,在我尝试管理它时会出现错误。

我在动作中的代码是(它创建参数并发送它):

for (var i=0; i<client_jobs.length; i++) {
    if(current_job == client_jobs[i].id){
        var option = document.createElement("option");
        option.value = client_jobs[i].id;
        option.setAttribute("selected", "selected");
        option.appendChild(document.createTextNode(client_jobs[i].label));
        sel.append(option);
    }else{

        var option = document.createElement("option");
        option.value = client_jobs[i].id;
        option.appendChild(document.createTextNode(client_jobs[i].label));
        sel.appendChild(option);

    }   
}

因此,管理发送的参数的操作是(注意我将参数作为可空值传递以避免错误,并且参数的名称与我之前用于调用RedirectToAction的名称相同):

public ActionResult CreateAccount(Account model)
{
    try
    {
        if (ModelState.IsValid)
        {
            _repository = new Repository();
            model.PublicadorId = GetPublicadorId();
            model.CreatedDate = DateTime.Now;
            model.ModifiedDate = DateTime.Now;
            model.IsActive = true;
            Int32 id = _repository.Store(model);

            return RedirectToAction("SubirImagenes/" + id, "Account");
        }
    }catch{}
}

任何帮助将不胜感激。我的应用程序的路由选择是:

[HttpPost]
[AuthorizeUser]
[ValidateAntiForgeryToken]
public ActionResult UploadImage(CompraVenta.Models.UploadFileModel fileModel, Int32? id)
{
    string directory = @"C:\Folder\";

    if (ModelState.IsValid)
    {
        if (fileModel != null && fileModel.File != null && fileModel.File.ContentLength > 0)
        {
            var fileName = Path.GetFileName(fileModel.File.FileName);
            fileModel.File.SaveAs(Path.Combine(directory, fileName));
        }

        return RedirectToAction("Index");
    }

    return View();
}

[AuthorizeUser]
public ActionResult SubirImagenes()
{
    return View();
}

4 个答案:

答案 0 :(得分:1)

您使用方式错误,您必须使用RedirectToAction()的{​​{3}}传递参数,该参数将RouteValueDictionary的对象作为参数。

这样做:

return RedirectToAction("UploadImage", "Account", new {id = id});

UPDATE:

如果操作 HttpPost ,则无法按上述方式传递参数,解决方法是直接调用操作而不使用RedirectToAction,如:

return UploadImage(null,id);

答案 1 :(得分:0)

您可以为RedirectToAction添加匿名对象以获取操作参数:

return RedirectToAction("Index", "Home", new {id = id});

答案 2 :(得分:0)

直接调用方法,而不是使用RedirectToAction,如:

return UploadImage(null,id);

而不是

return RedirectToAction("UploadImage/" + id, "Account");

注意: - 浏览器中的地址是旧方法

答案 3 :(得分:0)

最后我找到了解决方案。在“获取”动作“SubirImagenes”中我得到参数,然后,使用强类型模型,使用隐藏字段,我在“post”操作中传递参数,在我传递的模型中接收它作为该帖子中的参数动作。