Asp.Net MVC 5 How to send ViewBag to Partial View

大城市里の小女人 提交于 2019-12-09 18:27:31

问题


I have a _LoginPartial View and want to send data to it by ViewBag, but the Controller that I'am sending data from, doesn't have a View.

public PartialViewResult Index()
    {
        ViewBag.sth = // some data
        return PartialView("~/Views/Shared/_LoginPartial.cshtml");
    }

This code didn't work for me.


回答1:


It seems you're expecting this Index action to be called when you do: @Html.Partial('_LoginPartial'). That will never happen. Partial just runs the partial view through Razor with the current view's context and spits out the generated HTML.

If you need additional information for your partial, you can specify a custom ViewDataDictionary:

@Html.Partial("_LoginPartial", new ViewDataDictionary { Foo = "Bar" });

Which you can then access inside the partial via:

ViewData["Foo"]

You can also use child actions, which is generally preferable if working with a partial view that doesn't need the context of the main view. _LoginPartial seems like a good candidate, although I'm not sure how exactly you're using it. Ironically, though, the _LoginPartial view that comes with a default MVC project with individual auth uses child actions.

Basically, the code you have would already work, you would just need to change how you reference it by using Html.Action instead of Html.Partial:

@Html.Action("Index")

Notice that you're calling the action here and now the view.




回答2:


You can always pass data directly to the partial view.

public PartialViewResult Index()
{
    var data = // some data
    return PartialView("~/Views/Shared/_LoginPartial.cshtml", data);
}

Pass multiple pieces of data

public class MyModel
{
    public int Prop1 { get; set; }
    public int Prop2 { get; set; }
}

public PartialViewResult Index()
{
    var data = new MyModel(){ Prop1 = 5, Prop2 = 10 };
    return PartialView("~/Views/Shared/_LoginPartial.cshtml", data);
}



回答3:


I passed viewBag data to my partial view like below, and I converted that viewBag data object to JSON in my partial view by using @Html.Raw(Json.Encode(ViewBag.Part));

my code sample is given below.

 public async  Task<ActionResult> GetJobCreationPartialView(int id)
        {
            try
            {
                var client = new ApiClient<ServiceRepairInspectionViewModel>("ServiceRepairInspection/GetById");
                var resultdata = await client.Find(id);

                var client2 = new ApiClient<PartViewModel>("Part/GetActive");  
                var partData = await client2.FindAll(); 

                var list = partData as List<PartViewModel> ?? partData.ToList();
                ViewBag.Part = list.Select(x => new SelectListItem() {Text = x.PartName, Value = x.Id.ToString()});
                return PartialView("_CreateJobCardView" ,resultdata);
            }
            catch (Exception)
            {

                throw;
            }

        }

Here i have passed both model and viewBag .




回答4:


First off, the code in your question does not run. When you do @Html.Partial("_SomeView") the Index() method you have there does not run. All @Html.Partial("_SomeView") does is render _SomeView.cshtml in your current view using the current view's ViewContext.

In order to get this to work you need a bit of functionality that's common to all the controllers in your project. You have two options: extension method for ControllerBase or a BaseController that all the controllers in your project inherit from.

Extension method:

Helper:

public static class ControllerExtensions
{
    public static string GetCommonStuff(this ControllerBase ctrl)
    {
        // do stuff you need here
    }
}

View:

@ViewContext.Controller.GetCommonStuff()

BaseController

Controller:

public class BaseController : Controller
{
    public string GetCommonStuff()
    {
        // do stuff you need here
    }
}

Other controllers:

public class SomeController : BaseController
...
...

View:

@((ViewContext.Controller as BaseController).GetCommonStuff()) 


来源:https://stackoverflow.com/questions/25310805/asp-net-mvc-5-how-to-send-viewbag-to-partial-view

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!