ViewModel无效

时间:2014-07-08 02:06:07

标签: c# asp.net-mvc asp.net-mvc-4 razor

[HttpPost]
public ActionResult AddToCart(int phoneListingID, string sellerSKU)
{
    ShoppingBasket shoppingBasket = new ShoppingBasket();
    BasketItem currentItem = new BasketItem
    {
        sellerID = 1,
        Price = 100,
        Quantity = 1,
        sellerSKU = "testsku"
    };

    shoppingBasket.AddtoBasket(currentItem, this.HttpContext);

    var viewModel = new BasketViewModel
    {
        basketItems = ShoppingBasket.GetBasketItems(this.HttpContext),
        basketTotal = ShoppingBasket.GetBasketTotal(this.HttpContext)
    };

    return View(viewModel);
}

我的表格:

@using (Html.BeginForm("AddToCart","ShoppingBasket",new { phoneListingID = 12345, sellerSKU = "test"}, FormMethod.Post ))    
{   
    <input type="submit" value="AddToCart" />
}

预期的结果是返回了我的BasketViewModel页面,但是返回的视图是ShoppingBasket/AddToCart?PhoneID=xxxx&sellerSKU=xxxx

我做错了什么?

2 个答案:

答案 0 :(得分:2)

在MVC中假设你的行动就像

public ActionResult MyAction()
{
    return View();
}

在此场景中,它将指向名为“MyAction”的视图。如果您想将其发送到另一个视图,请将其设为

public ActionResult MyAction()
{
    return View("MyViewName");
}

如果你想通过一些模型来使其像

那样
public ActionResult MyAction()
{
    return View("MyViewName",model); // Here model is your object of model class
}

在你的代码片段中,您将返回默认值,即“AddToCart”视图,因为您没有明确说明。使您的代码像

return View("BasketViewModel",viewModel); // where BasketViewModel is your view name

答案 1 :(得分:0)

如果您希望转移到另一个视图尝试,您将返回该控制器的视图 return BasketViewActionResult(viewmodel)

然后访问您的&#39; BasketViewActionResult&#39;

Function BasketViewActionResult(model as BasketViewModel) as ActionResult
 return View(model)
End Function

很抱歉,如果你没有获得VB,如果你愿意,我可以把它翻译成C#。

编辑: 您也可以简单地更改表单的操作。

 @using (Html.BeginForm("BasketView","ShoppingBasket",...

并在该行动中进行所有操作