我遇到一个问题,似乎在两个控制器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;
欢呼
答案 0 :(得分:0)
这可能与JSON序列化有关,后者仅序列化公共属性。
如果您重定向,您的请求将被序列化,然后使用(通常)JSON进行自动魔术化。因此,对于要传输的所有数据,您将需要带有getter和setter的公共属性。也是一个空的构造函数。
但是,如果这些动作在同一个控制器中,为什么不像c#中的任何其他方法那样只调用动作方法呢? 因此,而不是
return RedirectToAction("select-appointment", request);
您写
return SelectAppoinment(request, model);
我知道,虽然不完全是您的要求,但至少可以解决。