C#在两个控制器ActionResults之间丢失值

时间:2019-01-18 13:16:27

标签: c# arrays model-view-controller

我遇到一个问题,似乎在两个控制器ActionResults之间删除了一个值。我将请求创建为新的ValuationRequest,并添加以下4个值。

WriteLine正确地将ValuationType显示为“字母”

        request = new ValuationRequest
        {
            ValuationType = new SearchType[] { SearchType.lettings },
            Postcode = model.Postcode,
            FromDate = DateTime.Now.AddHours(24),
            ToDate = DateTime.Now.AddDays(14)
        };

        Debug.WriteLine("ValTypeBefore:" + request.ValuationType[0].ToString());
        return RedirectToAction("select-appointment", request);

但是,当我将请求传递给下面显示的下一个ActionResult并立即再次尝试Debug.WriteLine时,由于该值为null,因此它出错。其他3个字段都进行得很完美。

        [ActionName("select-appointment")]
        public ActionResult SelectAppoinment(ValuationRequest request, ValuationModel model)
        {
            Debug.WriteLine("ValTypeAfter:" + request.ValuationType[0].ToString());

            var valuationAppointments = WebServiceUtility.GetValuationAppointments(request);

为什么会发生这种情况?

正在传递“请求”,但只删除了ValuationType。

下面的ValuationRequest类的代码:

public partial class ValuationRequest {

    private string postcodeField;

    private string officeCodeField;

    private System.DateTime fromDateField;

    private System.DateTime toDateField;

    private int durationField;

    private bool durationFieldSpecified;

    private int interludeField;

    private bool interludeFieldSpecified;

    private SearchType[] valuationTypeField;

欢呼

1 个答案:

答案 0 :(得分:0)

这可能与JSON序列化有关,后者仅序列化公共属性。

如果您重定向,您的请求将被序列化,然后使用(通常)JSON进行自动魔术化。因此,对于要传输的所有数据,您将需要带有getter和setter的公共属性。也是一个空的构造函数。

但是,如果这些动作在同一个控制器中,为什么不像c#中的任何其他方法那样只调用动作方法呢? 因此,而不是

return RedirectToAction("select-appointment", request);

您写

return SelectAppoinment(request, model);

我知道,虽然不完全是您的要求,但至少可以解决。